用 addr2line 將函式位址解析為函式名
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
選項,可以告訴工具輸出函式名。
$ cat >> test.c#include int main()
$gcc -wl,-map=test.map -g -o test test.c$ grep main test.map
0x08048258 __libc_start_main@@glibc_2.0
0x08048258 main
$addr2line 0x08048258 -e test -fmain
/home/mtj/test/test.c:4
$
使用 Addr2line 將函式位址解析為函式名
用 addr2line 將函式位址解析為函式名 addr2line 工具 它是標準的 gnu binutils 中的一部分 是乙個可以將指令的位址和可執行映像轉換成檔名 函式名和源 行數的工具。這種功能對於將跟蹤位址轉換成更有意義的內容來說簡直是太棒了。要了解這個過程是怎樣工作的,我們可以試驗乙個簡...
用 Addr2line 將函式位址解析為函式名
addr2line 工具 它是標準的 gnu binutils 中的一部分 是乙個可以將指令的位址和可執行映像轉換成檔名 函式名和源 行數的工具。在可執行程式中都包含有除錯資訊,其中很重要的乙份資料就是程式源程式的行號和編譯後的機器 之間的對應關係line number table。dwarf格式的...
用 Addr2line 將函式位址解析為函式名
addr2line 工具 它是標準的 gnu binutils 中的一部分 是乙個可以將指令的位址和可執行映像轉換成檔名 函式名和源 行數的工具。這種功能對於將跟蹤位址轉換成更有意義的內容來說簡直是太棒了。要了解這個過程是怎樣工作的,我們可以試驗乙個簡單的互動式的例子。我直接從 shell 中進行操...