天天看點

linux調試----addr2line将(轉換為位址及所在的檔案及行數)

Addr2line 工具(它是标準的 GNU Binutils 中的一部分)是一個可以将指令的位址和可執行映像轉換成檔案名、函數名和源代碼行數的工具。這種功能對于将跟蹤位址轉換成更有意義的内容來說簡直是太棒了。

要了解這個過程是怎樣工作的,我們可以試驗一個簡單的互動式的例子。這個示例 C 檔案(main.c)是通過 cat 一個簡單的應用程式實作的(也就是說,将标準輸出的文本重定向到一個檔案中)。然後使用 gcc 來編譯這個檔案,它會傳遞一些特殊的選項。首先,要(使用 -Wl 選項)通知連結器生成一個映像檔案,并(使用 -g 選項)通知編譯器生成調試符号。最終生成可執行檔案 test。得到新的可執行應用程式之後,您就可以使用grep 工具在映像檔案中查找 main 來尋找它的位址了。使用這個位址和 Addr2line 工具,就可以判斷出函數名(main)、源檔案(/work/main.c)以及它在源檔案中的行号(4)。

在調用 Addr2line 工具時,要使用 -e 選項來指定可執行映像是 test。通過使用 -f 選項,可以告訴工具輸出函數名。

[[email protected] work]# cat main.c

#include <stdio.h>

int main(void)

{

char *str = "hello";

str[0] = 'h';

return 0;

}

[[email protected] work]# gcc -Wl,-Map=main.map -g -o main main.c(編譯生成可執行檔案及main.map)

[[email protected] work]# ls

1.txt  main  main.c  main.map

[[email protected] work]# grep main main.map

                0x00000000080482c4                [email protected]@GLIBC_2.0

                0x0000000008048394                main

OUTPUT(main elf32-i386)

[[email protected] work]# addr2line 0x0000000008048394 -e main -f

main

/work/main.c:4