2012-02-23 44 views
14

我有一個C++對象文件,其中包含一些C++模板函數的實例。所討論的目標文件爲幾個不同的模板參數組合實例化相同的函數。我試圖調試一個問題,並希望看看模板函數的特定實例的反彙編(也就是我知道我想要檢查的函數的模板參數)。我通常會使用objdump來反彙編目標文件,但它(至少默認情況下)無法解壓C++函數名稱。有沒有辦法做到這一點?目標文件是使用gcc 4.6.1創建的。可以objdump C++模板函數的un-mangle名稱嗎?

回答

13

管它通過c++filt?可能需要給它-n,這取決於符號是否來自前面的下劃線。

+4

看起來像那樣會工作。我還發現了'objdump'的'-C'選項,它似乎至少適用於我的應用程序。 – 2012-02-23 18:51:02

+0

@JasonR更好。從歷史上看,有許多選項和變體名稱,例如'nm ++',但它們都被擊中和錯過,我養成了一切管道的習慣。 – smparkes 2012-02-23 18:57:28

+0

@JasonR,感謝張貼這個......'-C'在我的objdump版本中沒有記錄(沒有用--help顯示),但它仍然有效。 – 2013-11-25 14:51:42

8

objdump -C是否如Jason R在評論中提到的那樣。

man objdump說:

解碼(還原函數)低級別符號名到用戶級別的名稱。除了刪除由系統預設的任何初始下劃線外,這使得C++函數名稱可讀。不同的編譯器有不同的移動樣式。可選的demangling樣式參數可用於爲編譯器選擇合適的demangling樣式。上一個operator new[]objdump -CSr調用

輸出示例:

char *sn = new char[4]; 
10: bf 04 00 00 00   mov $0x4,%edi 
15: e8 00 00 00 00   callq 1a <main+0x1a> 
         16: R_X86_64_PC32  operator new[](unsigned long)-0x4 

沒有-C它會顯示重整名稱_Znam

nm也有該選項。

相關問題