1. 程式人生 > >快速定位到函式指標所對應的函式

快速定位到函式指標所對應的函式

在程式設計師的世界裡,在定位問題,檢視不是很熟悉的程式碼的時候,經常會遇到函式指標的使用。單從函式指標的使用來說,從指標的名字來看很難判斷這個函式的真實名字,實際上真正呼叫的是哪個函式,如果一個一個函式加列印,又過於太慢了,浪費大量的時間,本篇就是一種在不太熟悉整個程式架構的情況下能快速定位函式指標所指的函式的方法。

方法簡述,通過獲得該指標的地址,可以在程式中加列印語句來獲得,之後在將這個地址和編譯時或者從二進位制檔案中解析出的symbol表進行對比,一般symbol表中都會有記憶體中地址和函式名的對應關係,這樣搜尋地址所對應的函式名就是本指標函式所對應真實的函式名。

舉例說明:有如下程式碼,程式碼是從net-snmp的開原始碼中得來的。

Vp->findVar是一個函式指標,想要到它所對應的真實的函式名稱,我們要做的是首先新增列印,將該地址打印出來  例如:

這一句會把該函式地址打印出來,vp->findVar address: 20322b14 , 把該地址用於以下命令的輸入,執行結果可得到該函式指標所對應的函式名。

以上是一vxworks作業系統為例,其它的作業系統,例如 linux等,原理都是相同的,通過該方法很容易定位到指標所對應的函式地址。