2017-01-01 123 views
1

addr2line將地址轉換爲文件名和行號。我仍然是初學者在調試,並有一些關於addr2line的問題。addr2line如何定位源文件和代碼行?

  1. 如果我調試了一定的.so(二進制)文件,該工具可以如何定位(從哪裏可以得到它!) 它的源代碼文件,如果源不存在呢?

  2. 二進制文件中的地址與源碼中的行號碼 之間的關係是什麼,所以addr2line可以做這種映射嗎?

回答

3

一般來說,addr2line效果最好的ELF可執行文件或調試信息的共享庫。該調試信息由編譯器在您pass -g(或-g2等)到GCC時發出。它特別提供了源代碼位置(源文件的名稱,行號,列號)和函數,變量名稱,框架組織等等之間的映射......調試信息今天是DWARF格式(並且也由gdb debuggerlibbacktrace library等等)。請注意,調試信息包含源文件路徑(不是源文件本身)。

在實踐中,你可以(而且通常應該)通過-g(或-g2)調試選項GCC甚至optimization標誌像-O2。在這種情況下,調試信息稍微不夠精確,但實際上仍然可用。在某些情況下,堆棧幀可能會消失(內聯函數調用,尾調用優化......)。

您可以使用strip(1)實用程序從一些ELF executable中刪除調試信息(和其他符號表等)。

相關問題