2009-04-16 11 views
7

¿Cómo puedo ver los nombres destrozados generados por el compilador para las funciones sobrecargadas en C++? Estoy usando VC9, pero las respuestas para otros compiladores también son bienvenidas.Ver nombres compilados del compilador en C++

Editar: Me parecen útiles todas las respuestas aquí. Aceptando el que más me gustó.

Respuesta

5

Puede buscar en el archivo del mapa. Suponiendo que tiene activada la generación de archivos de mapas.

+0

Lo que si tiene varias sobrecargas de la misma función? –

+0

Luego verá muchas funciones con el mismo nombre envuelto en diferentes formularios mutilados, para cada sobrecarga. –

+0

Bueno, entonces verá una versión múltiple de esa función con cada uno de los formularios de nombres destrozados. Por lo tanto, el propósito del nombre de mangling, para evitar conflictos de nombres. –

5

Puede ver los nombres decorados (mutilados) con Dumpbin.

8

Puede ver los nombres de las funciones decoradas usando Dependency Walker.

Abra cualquier DLL \ EXE en el andador de dependencias y en el panel derecho puede ver una lista de nombres de funciones decoradas.

6

Como también preguntas acerca de otros compiladores. Hay una herramienta llamada nm en la cadena de herramientas gnu. Lo obtendrá en Linux y Cygwin, y creo que también está disponible en mingw. Al llamarlo sin parámetros, se mostrarán los símbolos mutilados en el binario. Llamarlo con --demangle hará lo obvio.

3

Mientras todo lo anterior funciona, hay una muy buena forma documented para ver los nombres destrozados mediante el uso de Listing Files: Páginas de propiedades del proyecto -> C/C++ -> Archivos de salida -> Salida del ensamblador.

(EDIT :)

hay una razón listado único archivos y DUMPBIN se documentan como formas de ver nombres representativos. Tanto el archivo de mapa como el de dependencia, sugeridos como soluciones, muestran solo nombres decorados. Si tiene varias sobrecargas del nombre de una función, tendrá dificultades para emparejarlas con los diversos nombres decorados que verá. (Eso es más o menos la reconstrucción del esquema de decoración. Mientras que possible, derrota el propósito original completo.)

0

linux gnu tool chain nm comando se puede utilizar para ver el nombre destrozado.

#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 
Cuestiones relacionadas