假设我有一个__builtin_return_address(0)
获取的地址。
稍后我想将其转换为coreResponding函数名。There's dladdr(3)
仅适用于动态库。
是否有任何方法接收任何符号的函数(可能通过libunwind、backrace_symbol()等)?
最佳答案
使用调试信息(-g
)编译所有代码(甚至可能是使用的一些共享库)。注意,GCC允许使用-g
和一些优化标志,如-O2
(当然,在这种情况下,调试信息是“近似”)。所以你可以用gcc -Wall -g -O2
等编译代码。。。。
然后使用最近版本的GCC中包含的Ian Taylor的libbacktrace。
顺便说一下,dladdr
或backtrace_symbol
也可以工作(但我建议使用libbacktrace
,因为它正在解析DWARF信息)。并且dladdr(3)对可执行文件本身的符号起作用。您可能需要使用-rdynamic
标志链接可执行文件。
还请注意,在“可执行文件”(仅包含全局符号)中,“符号”(特别是函数)不存在。还要注意ELF函数static
和attribute。
关于linux - 将地址转换为功能名称,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42089214/