【发布时间】:2021-04-19 04:15:11
【问题描述】:
使用 backtrace 和 backtrace_symbols,我可以获得一个感兴趣的重整函数名称(我们将其称为属于 libfsw.so 的 funcA_mangledName。
我的目标是获取源文件和定义它的行号。我可以对未在库文件中定义的函数执行此操作,如下所示。 stacktrace 保存回溯。 filename = S_main_executable 在一般情况下。
sprintf(syscom[jj], "addr2line %p -e %s", stacktrace[jj], filename);
system(syscom[jj]);
但是,当函数是库的一部分时,这不起作用,即文件名 = libfsw.so。
向后工作,我可以在 linux 终端上执行此操作:
nm libfsw.so | grep funcA_mangledName
获取:000000000020cbea T funcA_mangledName
然后当我进入linux终端时:
addr2line 0x000000000020cbea -e libfsw.so
我得到了正确的源文件和行号。
从开头到正确的文件偏移量,我缺少什么?
【问题讨论】:
标签: function shared-libraries offset nm addr2line