Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Print layout of C++ object with g++ compiler

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

like image 495
zaheer Avatar asked Jun 05 '10 07:06

zaheer


3 Answers

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.

like image 165
Philipp Avatar answered Oct 17 '22 11:10

Philipp


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.

like image 41
Employed Russian Avatar answered Oct 17 '22 11:10

Employed Russian


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

Note that since GCC 8, the -fdump-class-hierarchy option has been replaced with -fdump-lang-class.

like image 12
fredoverflow Avatar answered Oct 17 '22 11:10

fredoverflow