我有一个通过内存跟踪程序执行的应用程序。我试图使用readelf --debug-dump=decodedline
获取内存地址/行#信息,但我看到的内存地址经常与该转储给出的内存地址不匹配。我写了一些东西来匹配每个地址与DWARF数据中出现的“最新”地址 - 这似乎清理了一些东西,但我不确定这是否是解释这些数据的“官方”方式。
有人可以解释使用DWARF将程序地址映射到行号的确切过程吗?
答案 0 :(得分:3)
查看程序addr2line
。如果不能完全解决您的问题(例如通过炮轰或链接其功能),它可能会为您提供有关如何执行此操作的一些指导。
答案 1 :(得分:0)
确实,正如Phil Miller的回答所提到的,addr2line
是您的朋友。我有一个gist,在这里展示了如何从回溯获得的地址获取(C ++)应用程序源代码中的行号。
遵循此过程不会向您显示您提到的过程,但是可以使您了解如何将代码映射到目标代码(在可执行文件或库/归档中)。希望对您有所帮助。