使用DWARF信息将内存地址映射到行号

时间:2011-06-24 19:23:15

标签: debugging dwarf

我有一个通过内存跟踪程序执行的应用程序。我试图使用readelf --debug-dump=decodedline获取内存地址/行#信息,但我看到的内存地址经常与该转储给出的内存地址不匹配。我写了一些东西来匹配每个地址与DWARF数据中出现的“最新”地址 - 这似乎清理了一些东西,但我不确定这是否是解释这些数据的“官方”方式。

有人可以解释使用DWARF将程序地址映射到行号的确切过程吗?

2 个答案:

答案 0 :(得分:3)

查看程序addr2line。如果不能完全解决您的问题(例如通过炮轰或链接其功能),它可能会为您提供有关如何执行此操作的一些指导。

答案 1 :(得分:0)

确实,正如Phil Miller的回答所提到的,addr2line是您的朋友。我有一个gist,在这里展示了如何从回溯获得的地址获取(C ++)应用程序源代码中的行号。

遵循此过程不会向您显示您提到的过程,但是可以使您了解如何将代码映射到目标代码(在可执行文件或库/归档中)。希望对您有所帮助。