117

我收到了一个相当长且令人困惑的链接错误,如果我可以将它粘贴到某个网站上的某个文本框中并为我解开名称,我会喜欢它。

有人知道这样的服务吗?

4

5 回答 5

156

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

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

@Update:它现在也对 MSVC 和 Java 符号进行了解码。

于 2012-05-05T23:20:42.217 回答
108

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

编辑:修复了转义问题

于 2012-03-19T02:21:56.030 回答
31

大多数(如果不是全部)C++ 编译器都带有c++filt工具,该工具可以完全满足您的需求。

如果您想在鼠标单击时使用它...为它编写一个 GUI ;)

于 2010-06-09T14:07:44.233 回答
10

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

如果您只需要对 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)
           ^^^^^^^^^^^
于 2013-07-22T15:45:09.687 回答
2

仅供参考,还有一个 Ruby gem 可以对 Borland/MS/任何损坏的名称进行解构:unmangler

于 2013-05-04T15:07:30.317 回答