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++?
14
A
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.
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
- 1. Zachowanie C++ funkcji szablonu
- 2. Czy można sparametryzować stałość funkcji elementu szablonu?
- 3. adres funkcji szablonu C++
- 4. objdump i rozwiązywanie powiązań lokalnych wywołań funkcji?
- 5. Przekazywanie nazwy pola do szablonu funkcji
- 6. Przeciążanie funkcji szablonu w C++
- 7. Czy istnieje coś takiego jak parametr szablonu szablonu funkcji?
- 8. Czy można zwrócić lambdę variadic z szablonu funkcji?
- 9. W klasie szablonu C++, czy mogę wpisać parametr szablonu przy użyciu tej samej nazwy?
- 10. Dlaczego nie można porównywać wskaźnika funkcji z funkcją szablonu bez jawnej nazwy funkcji?
- 11. Konflikt nazwy funkcji w C++
- 12. Czy można użyć funkcji constexpr jako argumentu szablonu?
- 13. Czy można użyć wiązania (zwiększania) za pomocą szablonu funkcji?
- 14. Czy można użyć funkcji lambda dla parametru szablonu?
- 15. Nie można użyć nazwy funkcji odległości
- 16. C++ szablonu specjalizacji funkcji: "nielegalne stosowanie wyraźnych argumentów szablonu"
- 17. Metaprogramowanie szablonu C++, obejście "statyczne, jeśli" - czy można je poprawić?
- 18. Czy można utworzyć alias szablonu?
- 19. Inicjalizacja zmiennych statycznych C++ wewnątrz funkcji szablonu
- 20. Przeciążanie funkcji wirtualnej klasy szablonu C++
- 21. Czy można użyć funkcji gmock do skrótów funkcji C?
- 22. Nie można wywołać funkcji składowej szablonu klasy szablonu z innej klasy szablonu
- 23. Czy można wyodrębnić rozmiar tablicy z argumentu szablonu?
- 24. Czy mogę wpisać parametr szablonu szablonu?
- 25. Błąd wywoływania funkcji niejednoznaczności szablonu
- 26. Zmiana typu zwrotu funkcji bez specjalizacji szablonu. C++
- 27. aliasing funkcji szablonu standardowego
- 28. Nadawanie nazwy anonimowej funkcji
- 29. Dziedziczenie z szablonu C++
- 30. pobieranie nazwy obiektu i nazwy funkcji
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. –
@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
@JasonR, dziękuję za opublikowanie tego ... '-C' był nieudokumentowany w mojej wersji' objdump' (nie pokazany z '--help'), ale nadal działał. –