有没有办法使用 g++ 编译器或任何其他方式打印 C++ 对象的布局。一个简化的例子(假设 int 需要 4 个字节)
class A{
int a;
};
class B:public A{
int b;
}
所以输出将是
A-
0 4
+ a +
B-
0 4 8
+ A.a + b +
了解对象的布局(在我的例子中是虚拟机代码)会很有用。
提前致谢。
问候,扎希尔
有没有办法使用 g++ 编译器或任何其他方式打印 C++ 对象的布局。一个简化的例子(假设 int 需要 4 个字节)
class A{
int a;
};
class B:public A{
int b;
}
所以输出将是
A-
0 4
+ a +
B-
0 4 8
+ A.a + b +
了解对象的布局(在我的例子中是虚拟机代码)会很有用。
提前致谢。
问候,扎希尔
看看手册页,-fdump-class-hierarchy
也许?
调试器需要您查找的信息,并在您使用-g
. 在 ELF/DWARF 平台(如 Linux)上,您可以通过执行以下命令来查看其中的内容:
g++ -g -c foo.cc
readelf -w foo.o
在其他平台上,objdump -g foo.o
可能工作。
对于 ELF/DWARF,pahole看起来是个不错的起点。
C++ 没有自省功能。一旦你的代码被编译,关于类的每一条信息都会丢失,除了什么typeid
和std::type_info
可以给你的。