是否有C++的在线名称demangler?

Rom*_*kov 103 c++ demangler

我得到一个相当长且令人困惑的链接错误,并且如果我可以将它粘贴到某个网站上的某个文本框中并且让我的名字没有被破坏,那就会喜欢它.

有谁知道这样的服务?

Raf*_*sta 126

我创建了这样一个在线服务: http://demangler.com

这是一个gcc c ++符号demangler.您只需将堆栈跟踪或nm的输出复制到文本框中,它将返回名称为demangled的输出.

@Update:它现在也解析了MSVC和Java符号.

  • 我经常使用它。但是它似乎已经关闭了,这是一个非常有用的页面 (4认同)
  • @RafaelBaptista 明白了。另外,只是想让您知道,您网站的证书已过期:) (3认同)

nat*_*nds 103

这可能有点晚了,但我根据这个问题创建了一个.它适用于我尝试的输入,通过__cxa_demangle和__unDName支持g ++和msvc ++,通过Emscripten编译为Javascript.希望这有助于某人:c ++ filtjs

编辑:修复了转义问题

  • 真棒!谢谢!也许在页面的某处提到"在线C++名称demangler",以便人们可以通过Google找到你? (6认同)
  • @Zibri:"小C源"不在线.为此,请使用现有的c ++ filt和undname实用程序. (3认同)
  • 如果您可以使用其他人提到的模板修复您的问题,那将非常有用.这导致SO上至少有一个[虚假问题](http://stackoverflow.com/questions/21284752/g-name-mangling-slightly-different). (2认同)

Dum*_*001 22

大多数(如果不是全部)C++编译器都附带了一个c++filt工具,它可以完全满足您的需求.

如果你想在鼠标点击它...好吧为它写一个GUI;)

  • **GCC**:[`c++filt`](https://sourceware.org/binutils/docs/binutils/c_002b_002bfilt.html) **Clang/LLVM**:[`llvm-cxxfilt`](https ://llvm.org/docs/CommandGuide/llvm-cxxfilt.html) **MSVC**:[`undname`](https://learn.microsoft.com/en-us/cpp/build/reference/decorated -名称#未修饰)。 (5认同)
  • 我用于c ++ filt的常用用例是`objdump -dr ./AClass.o | c ++ filt | less`(反汇编)或`nm ./AClass.o | c ++ filt | less`(目标文件内的符号列表) (3认同)
  • 大多数编译器不是GCC。不是GCC的编译器不提供c ++ filt。通过归纳,大多数编译器都不提供c ++ filt。 (2认同)

Sha*_*our 7

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

如果您只需要支持GCC和Clang,您还可以选择使用Coliru,它可能是最通用的在线C++编译器.

这不像剪切,粘贴和点击那么简单 - 但不是太难 - 而且看起来模板参数没有问题,如上所述.你只需要修改命令行来运行这样的事情:

cat main.cpp | c++filt -t
Run Code Online (Sandbox Code Playgroud)

通过这个示例看看它是什么demangles:

_Z6kernelIfLj3EEvPT_5arrayIPKS0_XT0_EES5_S2_IjXT0_EES6_S0_
Run Code Online (Sandbox Code Playgroud)

至:

void kernel<float, 3u>(float*, array<float const*, 3u>, array<float const*, 3u>, array<unsigned int, 3u>, array<unsigned int, 3u>, float)
           ^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)