2012-04-01 83 views
1

我有C/C++二進制庫(* .dll,* .sys)它們包含的obj文件及其符號(pdb),但不包含源代碼或映射文件。
根據它們由英特爾編譯器構建的符號(對於Windows)。檢查一個特定函數是否內聯英特爾編譯器

有什麼辦法來檢查一個特定函數是否內聯?

在此先感謝。

+1

請記住,函數*調用*是內聯的,它不是函數本身的屬性。我不知道文件格式,但是您應該能夠查看可執行文件的功能並找到符號文件的行號信息跳轉到不同文件的位置。 – Potatoswatter 2012-04-01 14:50:41

回答

0

ICC在內聯方面特別具有侵略性,在很多情況下,當函數被聲明爲inline(尤其是在MSVC上的__forceinline'd時),它實際上會在編譯階段拋出一個錯誤,如果它無法內聯它(顯然取決於你的項目編譯設置)。

這就是說,誠實地說,你能夠做到你需要的唯一方法就是附加一個調試器,在MSVC中暫停應用程序,切換到ASM視圖,並搜索對你正在尋找的函數的調用名稱(你說C/C++,它與C++不同,你必須搜索重名的名稱)。如果您找到對該功能的呼叫(call _myFunc),則不會內聯。

否則,如果你知道去哪裏找,通過瀏覽ASM找到呼叫者功能,並檢查其來源,以驗證該被叫通話要麼是或不存在。

這可能聽起來相當令人生畏,但它實際上很簡單,只需一個ctrl+f即可。