views:

136

answers:

4

Is there a way to print the layout of a C++ object using the g++ compiler or any other means. A simplified example (assuming int takes 4 bytes)

class A{
  int a;
};

class B:public A{
  int b;
}

so the output would be

A-
0      4
+  a   +

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

It would be useful to understand the layout of objects (in my case virtual machine code).

Thanks in advance.

Regards, Zaheer

A: 

C++ doesn't have introspection. Once your code is compiled, every piece of information about classes is lost except for what typeid and std::type_info can give you.

Philipp
I don't think he's talking about runtime introspection, but about some compiler option that is able to tell him about the memory layout chosen by the compiler for the objects in his code.
Matteo Italia
+5  A: 

Looking at the man pages, -fdump-class-hierarchy maybe?

FredOverflow
A: 

The information you seek is needed by debuggers and is emitted for them when you compile with -g. On ELF/DWARF platforms (such as Linux), you can see what's there by executing:

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

On other platforms, objdump -g foo.o may work.

For ELF/DWARF, pahole looks like a good place to start.

Employed Russian
A: 

pahole looks close to what i need, but ALAS it does not support C++ classes with nested namespaces

-- ignoring the classes die__process_unit: DW_TAG_class_type @ <0x11c3162> not handled!

zaheer
This isn't a discussion forum. Please delete this "answer", and add a comment to the answer you are referring to.
Employed Russian