2015-01-06 33 views
1

我有一個應用程序鏈接到一個ELF共享庫。它使用的庫已經去除了所有不需要的符號(使用strip --strip-unneeded)。我正在嘗試調試一個堆腐敗問題。我有glibc的的malloc()實現生成一個堆棧跟蹤,包含像這樣的一堆項:如何在ELF共享庫中找到符合指定偏移量的符號?

/lib/libfoo.so.0(+0x1c4853)[0x7fe5ae6c8853] 
/lib/libfoo.so.0(+0x1dc094)[0x7fe5ae6e0094] 
/lib/libfoo.so.0(+0x1d7902)[0x7fe5ae6db902] 

這些顯然都不是很有益的。在我的開發機器上(它與發生錯誤的機器是分開的,而且我沒有準備好訪問該系統),我有一個沒有被剝離的庫的副本。我可以輕鬆將上述符號偏移映射到它們出現的相應功能嗎?作爲獎勵,如果我能將它們映射到源代碼行數,它會更好。

+0

您是否嘗試過追溯? http://www.plunk.org/~hatch/goodies/backtracefilt.C –

回答

1

號提供,然後被刪除,以下正確答案:

可以使用addr2line工具,這一點,這是binutils的一部分,所以應該在系統上已安裝。

addr2line -e /path/to/libfoo.so.0 -fp 0x1c4853 

輸出應該像例如

some_function at /dev/src/main.c:11