有没有办法使用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
可以给你。
看看手册页, -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
可以给你。