addr2line 用法

本篇介紹 addr2line 的用法,以及如何使用 addr2line 搭配 core dump 的記憶體位置來找程式是壞在那一行程式碼。

addr2line 指令用法

假設 xxx 可以是執行檔或 so 檔, 在 core dump 找到掛掉的 addr 資訊,接著使用 addr2line 查詢的該 addr 記憶體位置的程式碼行數跟其他資訊,指令如下,

1
$ addr2line -Cfie <xxx/xxx.so> <addr>

輸入完上列指令後, 會輸出該程式是在哪個函式掛掉的跟第幾行,如下所示,是掛在 myprint 函式裡,確切位置在 cpp-crash.cpp 的第 6 行,

1
2
myprint(int*)
/home/xxx/cpp-crash.cpp:6

addr2line 指令選項

-C: 加上這個選項可以印出 c++ namespace,而不是一堆亂碼
-f: 顯示函式名字跟檔案路徑與行數
-i:
-e: 指定檔名,預設為 a.out
--exe: 同 -e

詳細用法請參考:https://linux.die.net/man/1/addr2line

addr2line 實際練習

想要實際練習可以參考這篇來實際練習看看。

其他參考
http://lazybing.github.io/blog/2016/12/22/addr2line-use/
https://stackoverflow.com/questions/7648642/how-to-use-the-addr2line-command-in-linux
https://blog.csdn.net/olidrop/article/details/7295908

其它相關文章推薦
Linux 常用指令教學懶人包
readelf 用法與範例
nm 用法與範例
Linux ldd 查看執行檔執行時需要哪些 library