Gibt es einen Online-Namens-Demangler für C ++? [geschlossen]
109
Ich erhalte einen ziemlich langen und verwirrenden Linkfehler und würde es lieben, wenn ich ihn einfach in ein Textfeld auf einer Website einfügen und die Namen für mich entstellen könnte.
Dies ist ein gcc c ++ Symbol Demangler. Sie kopieren einfach eine Stapelverfolgung oder die Ausgabe von nm in ein Textfeld und es wird die Ausgabe mit den entwirrten Namen zurückgegeben.
@Update: Es entwirrt jetzt auch MSVC- und Java-Symbole.
Dieser hat für mich funktioniert, aber nicht der in der populäreren Antwort: _ZN9cdnalizer11rewriteHTMLINS_6apache8IteratorEcEET_RKSsRKNS_6ConfigES3_S3_St8functionIFS3_RKS3_SB_EES9_IFvSsEE
matiu
Ihr Demangler kann keine Ref-Qualifikanten für Itanium entwirren. Ich schaue auf _ZNR4test1fEv, das von Clang generiert wurde.
Welpe
Danke, schöne Seite! Könnten Sie bitte white-space: normaldas responseSection <pre> -Tag hinzufügen oder ähnlich (und möglicherweise Zeilennummern hinzufügen)? Lange einzeilige Ausgabe ist derzeit nicht lesbar.
jplatte
1
Du solltest vorsichtig sein. Die meisten realen Implementierungen von Demanglern sind schrecklich fehlerhaft und unsicher. Sie arbeiten im Grunde nur mit verstümmelten Namen, die von derselben Plattform erstellt wurden, können jedoch bei allgemeinen Eingaben zu hoher Komplexität oder zu Speicherfehlern führen.
Kerrek SB
8
Ich habe es regelmäßig benutzt. Es scheint jedoch nicht zu funktionieren. Es war eine sehr schöne, nützliche Seite
chrise
104
Dies mag etwas spät sein, aber ich habe basierend auf dieser Frage eine erstellt. Es funktioniert mit den Eingaben, die ich anprobiert habe, unterstützt g ++ und msvc ++ über __cxa_demangle und __unDName, kompiliert über Emscripten nach Javascript. Hoffe das hilft jemandem: c ++ filtjs
Genial! Danke dir! Erwähnen Sie vielleicht irgendwo auf der Seite "Online C ++ Name Demangler", damit die Leute Sie über Google finden können?
Roman Starkov
1
Okay, sollte jetzt behoben werden.
Nattofriends
3
@ Zibri: Eine "kleine C-Quelle" ist nicht online. Verwenden Sie dazu die vorhandenen Dienstprogramme c ++ filt und undname.
Nattofriends
1
@nattofriends: Ihr Tool scheint Klammern nicht zu entkommen ??_R3?$KxSet@V?$KxSpe@DI@@I@@8.
Mooing Duck
2
Es wäre sehr hilfreich, wenn Sie Ihr Problem mit Vorlagen beheben könnten, die andere erwähnt haben. Dies hat mindestens eine falsche Frage zu SO verursacht.
Shafik Yaghmour
24
Die meisten (wenn nicht alle) C ++ - Compiler werden mit einem c++filtTool geliefert, das genau das tut, wonach Sie anscheinend suchen.
Wenn Sie es per Mausklick wollen ... schreiben Sie eine GUI dafür;)
Ich möchte es mit minimalem Aufwand im Gegensatz zu einem Mausklick :) Na ja, ich brauche es sowieso nicht sehr oft.
Roman Starkov
3
Mein üblicher Anwendungsfall für C ++ Filt ist objdump -dr ./AClass.o | c++filt | less(Disassembler) oder nm ./AClass.o | c++filt | less(Liste der Symbole in der Objektdatei)
Dummy00001
2
Die meisten Compiler sind keine GCC. Compiler, die nicht GCC sind, liefern kein C ++ - Filt aus. Durch Induktion liefern die meisten Compiler kein C ++ - Filt aus.
Unsichtbarer
9
Es gibt zwei Online-Lösungen zum Kopieren und Einfügen:
demangler.com , das GCC- , Visual Studio- oder Java-Symbole unterstützt
Wenn Sie nur Unterstützung für GCC und Clang benötigen, haben Sie auch die Möglichkeit, Coliru zu verwenden , den wahrscheinlich vielseitigsten Online-C ++ - Compiler .
Dies ist nicht ganz so einfach wie Ausschneiden, Einfügen und Klicken - aber nicht zu viel schwieriger - und es scheint, dass es keine Probleme mit Vorlagenparametern gibt, wie oben erwähnt. Sie müssen nur die Befehlszeile ändern, um Folgendes auszuführen:
Antworten:
Ich habe einen solchen Online-Service erstellt: https://demangler.com
Dies ist ein gcc c ++ Symbol Demangler. Sie kopieren einfach eine Stapelverfolgung oder die Ausgabe von nm in ein Textfeld und es wird die Ausgabe mit den entwirrten Namen zurückgegeben.
@Update: Es entwirrt jetzt auch MSVC- und Java-Symbole.
quelle
white-space: normal
das responseSection <pre> -Tag hinzufügen oder ähnlich (und möglicherweise Zeilennummern hinzufügen)? Lange einzeilige Ausgabe ist derzeit nicht lesbar.Dies mag etwas spät sein, aber ich habe basierend auf dieser Frage eine erstellt. Es funktioniert mit den Eingaben, die ich anprobiert habe, unterstützt g ++ und msvc ++ über __cxa_demangle und __unDName, kompiliert über Emscripten nach Javascript. Hoffe das hilft jemandem: c ++ filtjs
Bearbeiten: Escape-Problem behoben
quelle
??_R3?$KxSet@V?$KxSpe@DI@@I@@8
.Die meisten (wenn nicht alle) C ++ - Compiler werden mit einem
c++filt
Tool geliefert, das genau das tut, wonach Sie anscheinend suchen.Wenn Sie es per Mausklick wollen ... schreiben Sie eine GUI dafür;)
quelle
objdump -dr ./AClass.o | c++filt | less
(Disassembler) odernm ./AClass.o | c++filt | less
(Liste der Symbole in der Objektdatei)Es gibt zwei Online-Lösungen zum Kopieren und Einfügen:
Wenn Sie nur Unterstützung für GCC und Clang benötigen, haben Sie auch die Möglichkeit, Coliru zu verwenden , den wahrscheinlich vielseitigsten Online-C ++ - Compiler .
Dies ist nicht ganz so einfach wie Ausschneiden, Einfügen und Klicken - aber nicht zu viel schwieriger - und es scheint, dass es keine Probleme mit Vorlagenparametern gibt, wie oben erwähnt. Sie müssen nur die Befehlszeile ändern, um Folgendes auszuführen:
Sehen Sie es live mit diesem Beispiel, das entwirrt:
zu:
quelle
Zu Ihrer Information, es gibt auch ein Rubin-Juwel, um Borland / MS / was auch immer verstümmelte Namen zu entwirren : Unmangler
quelle