是否有C ++的在线名称分解器?[关闭]


109

我收到了一个相当长且令人困惑的链接错误,如果我可以将其粘贴到某个网站的某些文本框中,并为我保留名称,则将不胜感激。

有人知道这样的服务吗?


3
顺便说一句,你是什么编译器?也许您可以使用随附的现成工具。
Sharptooth 2010年

4
我找到了“ undname.exe”,它为VC ++做了工作。
罗曼·斯塔科夫

3
在此处粘贴您的名字,如果它是VC2005的名字,我将其分解。
xtofl 2010年

Answers:


133

我创建了这样的在线服务: https://demangler.com

这是gcc c ++符号分解器。您只需将堆栈跟踪或nm的输出复制到文本框中,它将返回名称已取消修饰的输出。

@Update:现在也可以取消MSVC和Java符号的组合。


这一次为我工作,但不是一个中较受欢迎的答案:_ZN9cdnalizer11rewriteHTMLINS_6apache8IteratorEcEET_RKSsRKNS_6ConfigES3_S3_St8functionIFS3_RKS3_SB_EES9_IFvSsEE
matiu

您的分解器无法分解Itanium的引用限定符。我正在看Clang生成的_ZNR4test1fEv。
小狗

谢谢,不错的网站!您能否添加white-space: normal或类似于responseSection <pre>标记(并可能添加行号)?目前无法读取长单行输出。
jplatte 2014年

1
你要小心点 现实世界中大多数拆弹器的实现都是令人毛骨悚然的错误和不安全感。它们基本上只能使用同一平台产生的错误名称,但可能会遇到高复杂性或在常规输入上出现内存错误的情况。
Kerrek SB

8
我经常使用它。不过,它似乎已关闭。这是一个非常不错的页面,非常有用
chrise

104

这可能有点晚了,但是我根据这个问题创建了一个。它可以与我尝试过的输入配合使用,通过__cxa_demangle和__unDName支持g ++和msvc ++,并通过Emscripten编译为Javascript。希望这对某人有帮助:c ++ filtjs

编辑:修复了转义问题


6
太棒了!谢谢!也许在页面上某处提到“在线C ++名称分解器”,以便人们可以通过Google找到您?
罗曼·斯塔科夫

1
好的,现在应该修复。
nattofriends 2013年

3
@Zibri:“小型C源代码”未在线。为此,请使用现有的c ++ filt和undname实用程序。
nattofriends

1
@nattofriends:您的工具似乎没有逃脱括号,请参见??_R3?$KxSet@V?$KxSpe@DI@@I@@8
Mooing Duck

2
如果您可以使用其他人提到的模板来解决问题,那将非常有帮助。这至少引起了一个关于SO的虚假问题
Shafik Yaghmour 2014年

24

大多数(如果不是全部的话)C ++编译器都附带c++filt工具,该工具可以准确地执行您显然想要的功能。

如果您希望通过鼠标单击它,...为其编写一个GUI;)


与鼠标单击相反,我希望用最少的精力来完成它:)哦,好吧,我还是不需要经常使用它。
罗曼·斯塔科夫

3
我通常的c ++ filt用例是objdump -dr ./AClass.o | c++filt | less(反汇编程序)或nm ./AClass.o | c++filt | less(目标文件内的符号列表)
Dummy00001 2010年

2
大多数编译器都不是GCC。不是GCC的编译器不提供c ++ filt。通过归纳,大多数编译器都不提供c ++ filt。
IInspectable

9

有两种复制和粘贴在线解决方案:

如果仅需要对GCC和Clang的支持,则还可以选择使用Coliru,它可能是功能最丰富的在线C ++编译器

这不像剪切,粘贴和单击那样简单,但是却不那么费劲,而且看起来模板参数没有问题,如上所述。您只需要修改命令行即可运行以下命令:

cat main.cpp | c++filt -t

结合以下示例了解如何进行现场调试:

_Z6kernelIfLj3EEvPT_5arrayIPKS0_XT0_EES5_S2_IjXT0_EES6_S0_

至:

void kernel<float, 3u>(float*, array<float const*, 3u>, array<float const*, 3u>, array<unsigned int, 3u>, array<unsigned int, 3u>, float)
           ^^^^^^^^^^^

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.