2013-04-11 7 views
7

Ich verschiebe Entwicklung zu Linux, aber ich konnte nicht finden, wie ich eine Ausgabe ähnlich/d1reportSingleClassLayout von MSVC++ unter g ++ oder clang ++ erhalten kann. Wenn diese Compiler keine solche Funktion haben, gibt es ein externes Tool, das ähnliche Visualisierungen bereitstellt?Was ist das Linux-Äquivalent zu MSVC++/d1reportSingleClassLayout?

+1

Sie wären besser dran, das auf Stack-Überlauf zu fragen, da dies wirklich mehr eine C++ Frage als alles andere; bestimmte Compilerfunktionen wie diese sind für das Betriebssystem, auf dem der Compiler läuft, nicht sehr relevant. – delicateLatticeworkFever

+0

Ja, fing den Schnitt innerhalb von 5 min;) Thx. Ich habe es auch markiert. – delicateLatticeworkFever

+0

Danke für Ihre schnellen Antworten! Ich dachte, da ich eine Linux-Lösung möchte, wäre es hier angebracht. Entschuldigung für den Lärm. –

Antwort

7

Sie müssen die Datei mit Debugging-Informationen kompilieren (-g Option) und dann verwenden, um das Strukturlayout anzuzeigen. pahole ist normalerweise aus dem dwarves Paket (source; on GitHub; in Ubuntu) erhältlich.

$ 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 */ 
}; 

Die -C Option können Sie auswählen, welche Klasse/Struktur zu untersuchen.

Wenn Sie keinen Zugriff auf haben, können Sie die gleichen Informationen in einer viel weniger lesbaren Form von readelf -wi myfile.o oder eu-readelf -winfo myfile.o erhalten. Das Dokument https://www.kernel.org/doc/ols/2007/ols2007v2-pages-35-44.pdf beschreibt neben anderen dwarves Werkzeugen.