替代Linux上的backtrace(),可以找到静态函数的符号

在手册页中,Linux上的backtrace()函数说:

Note that names of “static” functions
are not exposed, and won’t be available in the backtrace.

但是,启用调试符号(-g)后,addr2line和gdb等程序仍然可以获取静态函数的名称.有没有办法从进程内部以编程方式获取静态函数的名称?

解决方法:

如果您的可执行文件(和链接库)使用调试信息进行编译(即使用-g标记为gcc或g),那么您可以使用来自GCC内部的Ian Taylor的libbacktrace(已宣布here) – 请参阅其代码here

该库(BSD许可的免费软件)使用来自该进程链接的可执行文件和共享库的DWARF调试信息.请参阅其README文件.

请注意,如果使用优化进行编译,则可以内联某些函数(即使没有在源代码中明确标记内联,并且静态内联函数可能没有任何适当的自己的代码).然后回溯不会说明他们.

上一篇:java – 未知的崩溃报告android


下一篇:c – GDB无法显示堆栈并显示“#1 0x0000000000000000 ?? ()”