从 backtrace_symbols 接收到的 c++ 符号不显示 g++ 中的函数

Alo*_*lon 2 c++ linux gcc g++ backtrace

我正在尝试以编程方式在代码中打印回溯,使用 -g 编译所有源代码,并与其链接,并且我还添加了 fvisibility=internal。

但是当我调用符号列表时,我的所有代码如下所示:

模块()[0x424b69]

为什么函数名称没有出现在大括号中,我应该添加什么其他可能的标志?

谢谢。

小智 5

你应该使用

-rdynamic
Run Code Online (Sandbox Code Playgroud)

就像是:

g++ -g -rdynamic main.cpp
Run Code Online (Sandbox Code Playgroud)

来自http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html

-rdynamic
在支持它的目标上将标志 -export-dynamic 传递给 ELF 链接器。这指示链接器将所有符号(而不仅仅是使用过的符号)添加到动态符号表中。对于 dlopen 的某些用途或允许从程序内获取回溯,需要此选项。