将 C 程序中的地址转换为源行

标签 c

在我的 C 程序中,我使用 backtrace 获取函数调用堆栈,然后使用 backtrace 的输出通过 backtrace_symbols 获取函数名称。生成的字符串包含函数名称和调用启动代码的地址以及该函数。有没有办法将这些地址转换为文件名和行号?我的意思是使用 gcc 扩展的 C 库(仅适用于 Linux)。 提前致谢!

最佳答案

在应用程序外部,您可以使用 addr2line 将地址转换为源文件名和行号。公用事业。 (此实用程序特定于 Linux;Mac OS X 具有类似的 atos 实用程序。)

在应用程序中,您可以使用 dladdr函数将地址解析为共享对象和符号名称。不过,我不知道有什么方法可以访问调试信息以获取应用程序中的行号。

关于将 C 程序中的地址转换为源行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30633814/

相关文章:

C 为什么 void 指针不能存储浮点值?

c - 数据报套接字中的单播源地址过滤

c - 如何修复 "Debug Error!, Stack around the variable ' x' 已损坏”?

c - 我应该在 Visual Studio 中的哪里寻找输出?

c - 如何构建你的c程序?

c - 通过静态库链接时功能无法正常工作,但如果复制到 prog 中则可以正常工作

c - 使用链接列表并删除节点或使用数组并对字符串进行小计算以查看是否可以跳过元素是否更有效?

C 非阻塞键盘输入

c - undefined reference ,gmp 库

c - 您如何获得具有 HID 的复合 USB Linux 设备来唤醒挂起的主机?