在我的 C 程序中,我使用 backtrace 获取函数调用堆栈,然后使用 backtrace 的输出通过 backtrace_symbols 获取函数名称。生成的字符串包含函数名称和调用启动代码的地址以及该函数。有没有办法将这些地址转换为文件名和行号?我的意思是使用 gcc 扩展的 C 库(仅适用于 Linux)。 提前致谢!
最佳答案
在应用程序外部,您可以使用 addr2line
将地址转换为源文件名和行号。公用事业。 (此实用程序特定于 Linux;Mac OS X 具有类似的 atos
实用程序。)
在应用程序中,您可以使用 dladdr
函数将地址解析为共享对象和符号名称。不过,我不知道有什么方法可以访问调试信息以获取应用程序中的行号。
关于将 C 程序中的地址转换为源行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30633814/