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