2013-04-11 12 views
7

Przenoszę programowanie do systemu Linux, ale nie mogłem znaleźć sposobu na uzyskanie wyniku podobnego do/d1reportSingleClassLayout z MSVC++ pod g ++ lub clang ++. Jeśli ten kompilator nie ma takiej funkcji, czy istnieje narzędzie zewnętrzne zapewniające podobną wizualizację?Jaki jest Linux odpowiadający opcji MSVC++/d1reportSingleClassLayout?

+1

Byłbyś lepiej pytaniem to na przepełnienie stosu, ponieważ jest to naprawdę więcej pytanie C++ niż cokolwiek innego; szczególne funkcje kompilatora, takie jak te, nie są zbyt istotne dla systemu operacyjnego, na którym działa kompilator. – delicateLatticeworkFever

+0

Tak, złapałem edycję w ciągu 5 minut;) Thx. Też to oznaczyłem. – delicateLatticeworkFever

+0

Dziękujemy za szybkie odpowiedzi! Pomyślałem, że skoro chcę rozwiązania linuksowego, byłoby to odpowiednie tutaj. Przepraszamy za hałas. –

Odpowiedz

7

Należy skompilować plik z informacjami o debugowaniu (opcja -g), a następnie użyć pahole, aby wyświetlić układ struktury. pahole jest zwykle dostępny z pakietu dwarves (source; on GitHub; in Ubuntu).

$ g++ -ggdb -c -o myfile.o myfile.cpp 
$ pahole -C MyClass myfile.o 
class MyClass { 
public: 

    int()(void) * *   _vptr.MyClass;  /*  0  4 */ 
    int      i;     /*  4  4 */ 
    const char *    c;     /*  8  4 */ 
    void MyClass(class MyClass *, const class MyClass &); 

    void MyClass(class MyClass *); 

    virtual void ~MyClass(class MyClass *, int); 


    /* size: 12, cachelines: 1, members: 3 */ 
    /* last cacheline: 12 bytes */ 
}; 

Opcja -C pozwala wybrać klasę/strukturę do zbadania.

Jeśli nie masz dostępu do pahole, możesz uzyskać te same informacje w znacznie mniej czytelnej formie od readelf -wi myfile.o lub eu-readelf -winfo myfile.o. Artykuł https://www.kernel.org/doc/ols/2007/ols2007v2-pages-35-44.pdf opisuje pahole obok innych narzędzi dwarves.

Powiązane problemy