2010-06-05 31 views
11

有沒有辦法使用g ++編譯器或其他方法來打印C++對象的佈局。 一個簡單的例子(假設int帶有4個字節)使用g ++編譯器打印C++對象的佈局

class A{ 
    int a; 
}; 

class B:public A{ 
    int b; 
} 

所以輸出將是

A- 
0  4 
+ a + 

B- 
0  4  8 
+ A.a + b + 

理解對象的佈局(在我的情況下的虛擬機代碼)這將是有用的。

在此先感謝。

問候, Zaheer這樣

回答

0

C++不具有內省。編譯代碼後,除了typeidstd::type_info可爲您提供的信息外,關於類的每條信息都會丟失。

+2

我不認爲他在談論運行時反思,但是關於一些編譯器選項能夠告訴他關於編譯器爲他的代碼中的對象選擇的內存佈局。 – 2010-06-05 11:07:16

10

看着手冊頁,-fdump-class-hierarchy也許?

2

您尋求的信息是調試器所需要的,當您使用-g進行編譯時,它們會發送給您。在ELF/DWARF平臺(如Linux),你可以看到通過執行那裏的東西:

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

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

對於ELF/DWARF,pahole看起來是一個很好的開始。