addr2line 工具(它是標準的 gnu binutils 中的一部分)是乙個可以將指令的位址和可執行映像轉換成檔名、函式名和源**行數的工具。這種功能對於將跟蹤位址轉換成更有意義的內容來說簡直是太棒了。
要了解這個過程是怎樣工作的,我們可以試驗乙個簡單的互動式的例子。(我直接從 shell 中進行操作,因為這是最簡單地展示這個過程的方法,如清單 4 所示。)這個示例 c 檔案(test.c)是通過cat
乙個簡單的應用程式實現的(也就是說,將標準輸出的文字重定向到乙個檔案中)。然後使用 gcc 來編譯這個檔案,它會傳遞一些特殊的選項。首先,要(使用-wl
選項)通知鏈結器生成乙個映像檔案,並(使用-g
選項)通知編譯器生成除錯符號。最終生成可執行檔案 test。得到新的可執行應用程式之後,您就可以使用grep
工具在映像檔案中查詢main
來尋找它的位址了。使用這個位址和 addr2line 工具,就可以判斷出函式名(main
)、原始檔(/home/mtj/test/test.c)以及它在原始檔中的行號(4)。
在呼叫 addr2line 工具時,要使用-e
選項來指定可執行映像是test
。通過使用-f
選項,可以告訴工具輸出函式名。
12 $ cat >>test.c
3 #include 4
intmain()59
10 $ gcc -wl,-map=test.map -g -o test test.c
11 $ grep
main test.map
120x08048258 __libc_start_main@@glibc_2.0
130x08048258
main
14 $ addr2line 0x08048258 -e test -f
15main
16 /home/mtj/test/test.c:4
17 $
在64位的機器上,位址為8個位元組。
使用 Addr2line 將函式位址解析為函式名
用 addr2line 將函式位址解析為函式名 addr2line 工具 它是標準的 gnu binutils 中的一部分 是乙個可以將指令的位址和可執行映像轉換成檔名 函式名和源 行數的工具。這種功能對於將跟蹤位址轉換成更有意義的內容來說簡直是太棒了。要了解這個過程是怎樣工作的,我們可以試驗乙個簡...
使用 Addr2line 將函式位址解析為函式名
用 addr2line 將函式位址解析為函式名 addr2line 工具 它是標準的 gnu binutils 中的一部分 是乙個可以將指令的位址和可執行映像轉換成檔名 函式名和源 行數的工具。這種功能對於將跟蹤位址轉換成更有意義的內容來說簡直是太棒了。要了解這個過程是怎樣工作的,我們可以試驗乙個簡...
用 Addr2line 將函式位址解析為函式名
addr2line 工具 它是標準的 gnu binutils 中的一部分 是乙個可以將指令的位址和可執行映像轉換成檔名 函式名和源 行數的工具。在可執行程式中都包含有除錯資訊,其中很重要的乙份資料就是程式源程式的行號和編譯後的機器 之間的對應關係line number table。dwarf格式的...