问题标签 [demangler]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
362 浏览

c++ - 寻求STL-aware c++filt

在我的开发环境中,我正在使用 GNU C++ 3.4.6 编译代码库。代码正在开发中,不幸的是有时会崩溃。很高兴能够通过 demangler 运行回溯,我使用 c++filt 3.4。当函数有许多 STL 参数时,问题就出现了。考虑

当这个函数在回溯中时,我平台上的错误输出是:

c++filt 好心地将其解码为

这与使用模板时遇到的编译器错误相同。但是,STL 是一个相当常规且可识别的模板包。所以我希望有人已经创建了 c++filt 的增强版本,它将转储一些更接近原始函数签名的东西。有什么提示吗?

0 投票
5 回答
53544 浏览

c++ - 是否有 C++ 的在线名称解码器?

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

有人知道这样的服务吗?

0 投票
3 回答
522 浏览

windows - Windows 拆解库

我正在寻找一个开源库来进行 Windows 可执行符号名称解构。这样的事情是否存在或者我必须使用 Microsoft 库?

0 投票
4 回答
14127 浏览

c++ - 什么是用于破坏 C++ 符号名称的 Linux 实用程序?

我有c++filt命令去破坏符号,相反的工具是什么工具来破坏符号名称?

如果我想调用dlsym()一个错位的 C++ 函数名,这将很有用。我宁愿不对代码中的名称进行硬编码,因为由于使用了新的编译器版本或新的编译器品牌,或者目前由于为多个平台编译,它可能会随着时间的推移而改变。

是否有一种编程方式可以在运行时获取表示 C++ 函数的字符串,以便代码独立于编译器?一种可能的方法是在编译时调用一个实用程序,该实用程序为正在使用的编译器执行名称修改,并将适当的修改后的 C++ 符号名称插入到字符串中dlsym()以供使用。

这是我在此站点上找到的最接近解决方案的解决方案,该解决方案是通过使用固定的 C 样式名称间接到您希望的库中定义的 C++ 符号来完成的dlsym(),但如果您无法控制该库的内容提供,这不是一个选项。

0 投票
1 回答
1504 浏览

c++ - c++:以编程方式将符号转换为代码行号

我正在开发Linux/gcc

我目前使用以下内容来获取自定义抛出异常的堆栈跟踪。Demangled函数名称和line numbers预期的一样,但我想避免使用addr2line来完全控制输出字符串的格式。

注意:用于-f在堆栈跟踪中显示正在运行的函数名称并-C显示它们已解构。

问:有没有人能指出我的程序化解决方案?(如果可能的话,请给我一些关于如何让它与 一起工作的建议MinGW/gcc)。

注意:或者可能只是gdb以某种方式使用可以帮助获得更多定制的输出?

谢谢您的帮助。

编辑:对于windows部分来说,它是可行的:https ://stackoverflow.com/a/6207030/1715716

编辑:以上指向 Microsoft Visual only 解决方案,所以对我来说最终没用。

0 投票
1 回答
1627 浏览

gdb - 通过 GDB 调试 DMD 生成程序

我正在尝试使用编译的 D 调试我的第一个程序

但是当我通过 GDB-7.6 运行可执行文件时,它似乎不知道在哪里可以找到源代码并解码堆栈跟踪的格式(及其名称分解)。

是否尚不支持 GDB 调试 DMD 生成的可执行文件,或者我错过了什么?

0 投票
1 回答
2364 浏览

c++ - 是否可以手动拆解 C++ 符号?

我收到一些这样的错误:

然后对于__ZN2nm7ComplexIfEC1ERKNS_10RubyObjectE.

不幸的是,c++filt似乎不想破坏这些。当我尝试在c++filtjs 在线界面中输入它们时,我得到“不是损坏的 C++ 符号”。

我对错误消息有点困惑,因为示例c++filtjs给出的是_ZN9wikipedia7article8wikilinkC1ERKSs,它代表wikipedia::article::wikilink::wikilink(std::string const&). 我看到了几种模式,其中ZN#,78for ::C1ERK我猜是对构造函数的某种传递引用。

我猜它在抱怨它缺少我的一个构造函数class Rational,例如Rational::Rational(RubyObject const&). Rational但是,它是一个模板,因此有助于我了解缺少哪个版本。

但这里的问题实际上是我如何手动解开。=)

0 投票
2 回答
79 浏览

d - D 工具 ddemangle.d 不会更改 DMD+GNU ld 链接错误的输出

我正在尝试消除我的链接错误,例如

通过使用ddemangle.dgithub 上的 dtools repo 作为

但我使用 DMD 2.063.2 和 git master 得到了相同的输出。

ddemangle.d 不是最新的吗?

更新:好的。谢谢!

破坏大部分消息,但不是全部。我想知道为什么。这里有几行

线索有人吗?

0 投票
0 回答
168 浏览

c++ - 拆解和导致“对 __gnu_gxx 命名空间的模糊引用”

当我需要在运行时打印类型信息时,我总是对std::type_info::name()结果应用去修饰。这是 GCC 的实现,它使用abi::__cxa_demangle()

今天我正在编写一个to_string模板,它允许我打印类型列表的内容。所以为了避免std::string连接,我使用了一个字符串流,std::ostringstream

_to_string是一个类模板,它实现operator<<了将类型列表的内容递归地打印到流中。(我不包括它是为了不使用不相关的元编程代码使帖子膨胀)

这可以完美地工作而无需拆解。当我包括<cxxabi>实现解构时,编译器ambiguous reference to __gnu_gxx namespacesstream.h.

可能是什么原因?

0 投票
2 回答
2874 浏览

c++ - c++filt 不会对 typeid 名称进行分解

我在 GCC C++编译器上运行代码,以输出 type_info::name:

但我得到以下结果:

并在拆解时,

我得到与之前相同的输出。还有其他解决方案吗?