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
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.
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.
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
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With