给定一个目标文件和地址addr2line工具可以将它与源代码中的文件和行号关联起来。addr2line的反向
我想要相反。给定一个行号和一个目标文件,我想获得与源代码中给定行对应的指令地址列表。
我知道我可以使用objdump -DS并寻找一条线路,但这很不方便,并且需要手动工作来过滤地址。你知道有什么工具可以做我想做的吗?如果我给它一个行列表?
UPD。
我举了一个我想要的例子。
我有一组文件行:
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'调试器可以通过可执行文件(而不是单独的对象文件)来完成。当然,你需要编译调试信息。 –
http://gcc.godbolt.org/为将行映射到asm的小函数做了很好的工作。它甚至有颜色编码。例如http://goo.gl/aLPTts –
@BasileStarynkevitch我可以编译调试信息。但我并没有完全理解如何获取gdb中的地址。我发现我可以设置一个断点,但它只显示一个地址,尽管同一行可能有多条指令。 – mcsim