Funktion mangle/demangle Funktionen
Habe ich bisherhier, wurde gezeigt, dass C++ - Funktionen sind nicht leicht zu vertreten in der Montage. Jetzt bin ich interessiert Lesen 1 oder andere Weise, weil callgrind, Teil valgrind, zeigen Sie demangled, während in der Montage Sie sind hier entstellt, so würde ich gerne entweder zerfleischen der valgrind-Funktion-Ausgang oder demangle der Versammlung die Namen der Funktionen. Schon mal jemand versucht sowas in der Art? Ich war auf der Suche an einem website und fand Folgendes heraus:
Code to implement demangling is part of the GNU Binutils package; see libiberty/cplus-dem.c and include/demangle.h.
schon mal jemand versucht, so etwas wie, dass, ich möchte demangle/mangle in C? mein compiler ist gcc-4.x
- Ich verstehe nicht, Ihre Frage - die Sie bereits gebucht, Ihre eigene Antwort, verwenden Sie den code aus der binutils. Gibt es ähnliche Bibliotheken / code-snippets für andere toolchains, also wo ist das problem?
- IIRC dann valgrind hat bereits eine --demangle=yes option demangle C++ - Symbole auf den Ausgang. Callgrind genannt werden kann, als
valgrind --tool=callgrind --demangle=yes
dann kann es nicht? - Ich hatte eröffnete ein weiteres forum, um zu überprüfen, ob ich demangle vallgrind stackoverflow.com/questions/4846411/de-mangeling-in-callgrind, aber niemand antwortete. Ich schaute auf das linux-Handbuch zu demangle es nicht geben alles! dein Vorschlag hat funktioniert. thnks
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie die
c++filt
Kommandozeilen-tool, um demangle den Namen.Hier ist mein C++11-Implementierung, abgeleitet von der folgenden Seite:
http://gcc.gnu.org/onlinedocs/libstdc++/manual/ext_demangling.html
Machen, die Speicherverwaltung einfach auf die zurückgegebenen (char *), ich bin mit einem std::shared_ptr mit einem benutzerdefinierten lambda 'deleter" - Funktion, die Aufrufe von free() auf das zurückgegebene Speicher. Da ich nicht immer sorgen zu machen über das löschen der Speicher auf meiner eigenen, ich nur benutzen Sie es als notwendig, und wenn der shared_ptr geht out of scope, der Speicher wird frei sein würde.
Hier ist das makro verwende ich, um den Zugriff auf die demangled Typ-Namen als (const char *). Beachten Sie, dass Sie muss RTTI aktiviert haben Zugang zu 'typeid'
So, innerhalb einer C++ - Klasse kann ich sagen:
unique_ptr
obwohl, oder gerade konstruieren, einenstd::string
es und free() sofort.