7

Wie kann ich die Compiler-generierten Mangled-Namen für überladene Funktionen in C++ anzeigen? Ich benutze VC9 aber Antworten für andere Compiler sind auch willkommen.View Compiler Mangled Namen in C++

Bearbeiten: Ich finde alle Antworten nützlich hier. Ich akzeptiere den, der mir am besten gefallen hat.

Antwort

5

Sie könnten in der Map-Datei suchen. Angenommen, Sie haben die Generierung von Map-Dateien aktiviert.

+0

Was passiert, wenn Sie mehrere Überlastungen der gleichen Funktion haben? –

+0

Dann werden Sie für jede Überladung viele Funktionen mit demselben Namen sehen, die in verschiedene verfälschte Formen eingepackt sind. –

+0

Nun, Sie werden dann mehrere Versionen dieser Funktion mit jedem der dort entstellten Namen Formulare sehen. Also der Zweck des Namens Mangling, Namenskonflikte zu vermeiden. –

5

Sie können verzierte Namen mit Dumpbin anzeigen.

8

Sie können die dekorierten Funktionsnamen mit Dependency Walker anzeigen.

Öffnen Sie eine beliebige DLL \ EXE in Abhängigkeit Walker und im rechten Bereich können Sie eine Liste der eingerichteten Funktionsnamen sehen.

6

Da fragen Sie auch nach anderen Compilern. Es gibt ein Tool namens nm auf der Gnu Toolchain. Du wirst es auf Linux und Cygwin bekommen, und ich glaube, dass es auch in mingw verfügbar ist. Wenn Sie ihn ohne Parameter aufrufen, werden die verfälschten Symbole in der Binärdatei angezeigt. Wenn man es mit --demangle anruft, wird es offensichtlich.

3

Während alle oben genannten Arbeiten, gibt es eine schön documented Weise die entstellten Namen durch die Verwendung von Listing Files anzuzeigen: Projekt -Eigenschaftenseiten -> C/C++ -> Ausgabedateien -> Assembler Output.

(EDIT :)

Es gibt einen Grund nur Auflisten von Dateien und DUMPBIN werden als Möglichkeiten zu dokumentieren ergänzte Namen zu sehen. Sowohl die Map-Datei als auch die Abhängigkeitswalker, die als Lösungen vorgeschlagen werden, zeigen nur dekorierte Namen an. Wenn Sie mehrere Überladungen eines Funktionsnamens haben, fällt es Ihnen schwer, sie mit den verschiedenen dekorierten Namen zu vergleichen, die Sie sehen würden. (Das ist mehr oder weniger Rekonstruktion des Dekorationsschemas. Während possible, vereitelt es den gesamten ursprünglichen Zweck.)

0

Linux Gnu Tool Chain nm Befehl kann verwendet werden, um Mangled Name zu sehen.

#include<iostream> 
using namespace std; 

int fun1(){} 
int fun1(int){} 
int main() 
{ 
return 0; 
} 
#g++ name_decoration_2.cpp 
#nm a.out 
... 
... 
000000000040064e T _Z4fun1i 
0000000000400648 T _Z4fun1v 
U [email protected]@GLIBCXX_3.4 
U [email protected]@GLIBCXX_3.4