2012-02-23 11 views
14

Mam obiekt obiektowy C++, który zawiera wystąpienia niektórych funkcji szablonu C++. Omawiany plik obiektowy tworzy tę samą funkcję dla kilku różnych kombinacji parametrów szablonu. Próbuję debugować problem i chciałbym spojrzeć na demontaż konkretnego wystąpienia funkcji szablonu (to znaczy, znam parametry szablonu dla funkcji, którą chcę zbadać). Zwykle robię to przy użyciu objdump, aby zdemontować plik obiektowy, ale (przynajmniej domyślnie) nie jest w stanie odłączyć nazw funkcji C++. Czy jest jakiś sposób to zrobić? Pliki obiektowe zostały utworzone przy użyciu gcc 4.6.1.Czy można objdump un-mangle nazwy funkcji szablonu C++?

Odpowiedz

13

Przeprowadź przez nią c++filt? Może być konieczne podanie go w zależności od tego, czy symbole pochodzą z/lub bez wiodącego podkreślenia.

+4

Wygląda na to, że to zadziała. Po prostu znalazłem opcję '-C' dla' objdump', która wydaje się działać przynajmniej dla mojej aplikacji. –

+0

@JasonR jeszcze lepiej. Historycznie istniały opcje i odmienne nazwy, takie jak "nm ++", ale były one chybione, a ja nabrałem zwyczaju robienia wszystkiego. – smparkes

+0

@JasonR, dziękuję za opublikowanie tego ... '-C' był nieudokumentowany w mojej wersji' objdump' (nie pokazany z '--help'), ale nadal działał. –

8

objdump -C robi to jak wspomniano przez Jason R w komentarzu.

man objdump mówi:

Decode (demangle) niskopoziomowe nazwy symboli na nazwy użytkownika szczebla. Oprócz usunięcia początkowego podkreślenia dodawanego przez system, umożliwia to odczytanie nazw funkcji C++. Różne kompilatory mają różne style mangowania. Opcjonalny argument stylu demangowania może być użyty do wyboru odpowiedniego stylu rozplątania dla kompilatora.

Przykładowe wyjście na operator new[] dalej i objdump -CSr inwokacji:

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 

Bez -C byłoby pokazać zniekształcone nazwy _Znam.

nm również ma tę opcję.

Powiązane problemy