将地址转换为函数名称

时间:2017-02-07 11:52:51

标签: linux gcc

说我有__builtin_return_address(0)获得的地址。 一段时间后,我想将其翻译为coreesponding函数名。

There's dladdr(3)仅适用于动态库。 有没有办法接收任何符号的功能(可能是libunwind,backrace_symbol()等)?

1 个答案:

答案 0 :(得分:1)

使用调试信息(-g)编译所有代码(甚至可能是您使用的某些共享库)。请注意,GCC可以使用 -g和一些优化标记,例如-O2(当然,在这种情况下,调试信息是“近似”)。因此,您可以使用gcc -Wall -g -O2等编译代码....

然后使用Ian Taylor的libbacktrace,它包含在最近的GCC版本中。

BTW,dladdrbacktrace_symbol也可能有效(但我建议使用libbacktrace,因为它正在解析DWARF信息)。 dladdr(3)确实可以处理来自可执行文件本身的符号。您可能需要将可执行文件与-rdynamic标记链接。

另请注意ELF可执行文件中static符号(特别是static函数)“并不存在”(仅全局符号保留在因此dladdr无法给予他们。另请注意visibility函数attributepragma

相关问题