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

Debugging 使用DWARF信息将内存地址映射到行号,debugging,dwarf,Debugging,Dwarf,我有一个通过内存跟踪程序执行的应用程序。我试图使用readelf--debug dump=decodedline获取内存地址/行信息,但我看到的内存地址与该转储给出的地址不经常匹配。我写了一些东西,将每个地址与DWARF数据中出现的“最新”地址相匹配——这似乎清理了一些东西,但我不确定这是否是解释这些数据的“官方”方式 有人能解释一下使用DWARF将程序地址映射到行号的确切过程吗?看看程序addr2line。如果不能完全解决您的问题,它可能会为您提供一些指导(例如,通过使用它或将其功能链接到中)

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


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

看看程序
addr2line
。如果不能完全解决您的问题,它可能会为您提供一些指导(例如,通过使用它或将其功能链接到中)。

事实上,正如菲尔·米勒的回答所述,
addr2line
是您的朋友。我有一个示例,其中我展示了如何从从回溯获取的地址获取(C++)应用程序源代码中的行号

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