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