13

有没有办法使用 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   +

了解对象的布局(在我的例子中是虚拟机代码)会很有用。

提前致谢。

问候,扎希尔

4

3 回答 3

10

看看手册页,-fdump-class-hierarchy也许?

于 2010-06-05T08:07:21.787 回答
4

调试器需要您查找的信息,并在您使用-g. 在 ELF/DWARF 平台(如 Linux)上,您可以通过执行以下命令来查看其中的内容:

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

在其他平台上,objdump -g foo.o可能工作。

对于 ELF/DWARF,pahole看起来是个不错的起点。

于 2010-06-07T03:04:40.233 回答
1

C++ 没有自省功能。一旦你的代码被编译,关于类的每一条信息都会丢失,除了什么typeidstd::type_info可以给你的。

于 2010-06-05T07:59:23.983 回答