給定一個目標文件和地址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