2011-06-23 64 views
2

我在調試一個開源庫,該庫有一個在加載時被初始化的結構。其中一個結構的成員是一個函數指針。什麼是最快的方法來確定它指向哪個功能?例如,如果我打印出函數指針的值,是否有一些工具可以用來查找函數的名稱?我在嵌入式Linux系統上執行此操作,並且GDB不可用(尚未)。這個地址指向哪個函數?

回答

5

鏈接器可以輸出一個映射文件。假設你的功能不移動,你可以在那裏查找地址。生成地圖文件的選項可能會有所不同;在我的Mac上它是-mapLinux man page表示它是-Map

除此之外,如果您沒有工作源代碼級調試解決方案,您應該做的第一件事情是得到一個。停止所有其他工作,直到您擁有適合開發的基礎設施。您可能必須努力說服您的管理層認爲這很重要,但希望您能讓他們理解。

1

我認爲你會發現addr2line command有用。

+0

我擁有的地址是共享庫中的一個函數。我猜我需要得到庫的基地址並從指針中減去它。獲取共享庫的基址的最簡單方法是什麼? – waffleman

+0

您是否嘗試過addr2line?它應該追逐由可執行文件引用的共享庫並提出一個答案... – Nemo

相關問題