【发布时间】:2016-03-01 11:28:05
【问题描述】:
给定一个目标文件和地址 addr2line 工具可以将它与源代码中的文件和行号相关联。
我想要相反的。给定一个行号和一个目标文件,我想获得与源代码中给定行相对应的指令地址列表。
我知道我可以使用 objdump -DS 并寻找一行,但这很不方便,并且需要手动过滤掉地址。如果我给它一个行列表,你知道任何可以做我想做的工具吗?
更新。
我举一个我想要的例子。
我有一组文件行:
src/a.c:14
src/a.c:28
src/b.c:44
我将此列表传递给一个工具:
cat lines | line2addr -e lib.so
它会向我报告这些行的指令地址:
0x442: src/a.c:14
0x444: src/a.c:14
0x44a: src/a.c:14
0x584: src/a.c:28
0x588: src/a.c:28
...
【问题讨论】:
-
gdb调试器可以对可执行文件(而不是单个目标文件)执行此操作。当然,您需要使用调试信息进行编译.. -
gcc.godbolt.org 在将线映射到 asm 的小功能方面做得很好。它甚至有颜色编码。例如goo.gl/aLPTts
-
@BasileStarynkevitch 我可以使用调试信息进行编译。但我不完全明白如何获取 gdb 中的地址。我发现我可以设置一个断点,但它只显示一个地址,虽然同一行可以有多个指令。