2016-06-10 24 views
1

Gemäß offiziellen Anweisungen, um ein Programm zu kompilieren mit Debugging-Unterstützung SieBugsymbol für ein Programm Expose mit mehreren Sprachen zusammengestellt

g++ -std=c++11 -O0 -g -c -o program1.o program1.cpp 

nun das gleiche mit einem C-Programm zu tun laufen können, es ist nur:

gcc -O0 -g -c -o program2.o program2.c 

um beide Arten miteinander zu verbinden, könnte ich verwenden:

g++ --std=c++11 -O0 -g -o program program.o program2.o 

Dann debuggen :

gdb program 
gdb > run <PARAMS> 

Es funktionierte ganz nach mehreren Versuchen mit den Compiler-Optionen (die oben genannten Optionen sind für eine funktionierende Version) bei bastelt. In einigen Fällen würden die C-Symbole geladen, aber die C++ - Symbole nicht.

Kann jemand etwas beleuchten, was die empfohlenen Optionen sind, Debugging für nicht-triviale Beispiele zu aktivieren, die mehrere kompilierte Sprachen mischen? Die gesamte Dokumentation bezieht sich nur auf triviale Beispiele.

+1

Nicht verwandt mit Ihrer Frage, aber ausführbare Programme haben nicht das '.so' Suffix, es ist für * Shared Object * (d. H. Dynamische Bibliotheken oder eine DLL). Auf POSIX-Systemen wie Linux oder OSX haben ausführbare Programme normalerweise kein Suffix. –

+2

Wie bei Ihrer Frage verwendet GCC immer die Option "-g", um Debug-Informationen hinzuzufügen, unabhängig von der Sprache. Es ist auch eine gute Idee, die Optimierung mit '-O0' zu deaktivieren. Das ist alles. –

+2

Der Link-Schritt benötigt auch die Option "-g". Und wenn das Debugging über 'gdb' erfolgt, dann ist die richtige Option für beide Kompilier- und Linkschritte' -ggdb', da dies noch mehr Informationen zur Verfügung stellt, die 'gdb' benutzen kann. – user3629249

Antwort

0

Fügen Sie in jedem Kompilierungs- und Verknüpfungsschritt die Option -g den Compiler-Flags hinzu. -O0 wird auch für Debug-Builds empfohlen, damit Sie die Funktionen des Compilers nicht optimieren. Inkonsistent zu sein, kann zu keinen Debug-Symbolen oder Teil-Debug-Symbolen führen.

1

Hinweis: Wenn Sie nur die Option -g verwenden, verwendet der Compiler das systemeigene Format des Betriebssystems, das variieren kann. Sie können stattdessen das Format explizit angeben, indem Sie andere -g... Varianten verwenden (z. B. -gdwarf-3 oder -g-stabs). Auf diese Weise können Sie sicherstellen, dass Ihre Objektdateien alle ein einheitliches Debug-Format haben, unabhängig davon, wo sie erstellt wurden.

Sie können auch gdb -only-Erweiterungen deaktivieren, indem Sie diese Methode verwenden, wenn Sie andere Debugger verwenden möchten. Details finden Sie unter this.