我正在使用backtrace_symbols()从我的c代码中打印堆栈(按照http://www.gnu.org/software/libc/manual/html_node/Backtraces.html上的说明)。但是,即使我使用-g -rdynamic构建了库,我也只能获取动态库中堆栈帧的地址。
现在,我有正在运行的进程,我有了库,如何找出每个帧地址对应的方法?提前谢谢。
这是在64位Linux上。
我打印出来的例子如下:
Obtained 9 stack frames.
/tmp/libexample.so [0x2aaabaae9771]
/tmp/libexample.so [0x2aaabaae9828]
/tmp/libexample.so [0x2aaabaaa8138]
/tmp/libexample.so [0x2aaabaab2402]
/tmp/libexample.so [0x2aaabaabd029]
/tmp/libexample.so [0x2aaabaa1e23a]
/tmp/libexample.so [0x2aaabaa24ded]
/lib64/libpthread.so.0 [0x30b700677d]
答案 0 :(得分:1)
我认为您正在寻找dladdr
功能。