2010-06-05 10 views
11

¿Hay alguna forma de imprimir el diseño de un objeto C++ utilizando el compilador g ++ o por cualquier otro medio? Un ejemplo simplificado (int suponiendo toma 4 bytes)Diseño de impresión del objeto C++ con el compilador g ++

class A{ 
    int a; 
}; 

class B:public A{ 
    int b; 
} 

así sería la salida

A- 
0  4 
+ a + 

B- 
0  4  8 
+ A.a + b + 

Sería útil para entender la disposición de los objetos (en mi caso código de máquina virtual).

Gracias de antemano.

Saludos, Zaheer

Respuesta

0

C++ no tiene la introspección. Una vez que se compila el código, se pierde toda la información sobre las clases, excepto por lo que typeid y std::type_info pueden proporcionarle.

+2

No creo que esté hablando de introspección de tiempo de ejecución, sino de alguna opción de compilación que le pueda informar sobre el diseño de memoria elegido por el compilador para los objetos en su código. –

10

En cuanto a las páginas man, -fdump-class-hierarchy tal vez?

2

La información que busca es necesaria para los depuradores y se emite para ellos cuando compila con -g. En plataformas ELF/enano (como Linux), se puede ver lo que hay allí ejecutando:

g++ -g -c foo.cc 
readelf -w foo.o 

En otras plataformas, objdump -g foo.o puede trabajar.

Para ELF/DWARF, pahole parece un buen lugar para comenzar.

Cuestiones relacionadas