2009-04-26 18 views
6

Ich bin ein Anfänger in GDB und ich habe es richtig funktioniert. Ich frage mich jedoch, wie dies in großen Projekten verwendet wird. Ich habe ein Projekt, bei dem Build mit Makefile und g ++ erstellt wird. Damit GDB funktioniert, müssen wir mit Debug-Symbolen auf, rechts (g ++ -g-Dateien) kompilieren?Debugging mit gdb - Best Practices

Frage

  1. Brauche ich ein neues Ziel in Make-Datei so etwas wie "debug", zu erstellen, so dass ich einen Debug-Build wie make debug machen kann. Ist das die beste Praxis?
  2. Angenommen, ich muss nur foo.cpp debuggen und ist es möglich, Debug-Symbole nur für das andere zu erzeugen, als das ganze Programm einschließlich main zu erstellen?

Irgendwelche Gedanken?

Antwort

2
  1. Nicht benötigt, obwohl man mit -g immer Gebäude (manchmal betrachten wünschen können, können Sie sogar noch optimiert müssen versuchen, und zu debuggen (-O1, -O2, usw.) Code, warum nicht verlassen - g auf? Für Releases können Sie immer nur Streifen auf dem binären laufen.

  2. Ja. mit -g nur diese Datei erstellen.

+0

Was meinen Sie mit "Für Releases, können Sie immer nur Streifen auf der Binärdatei ausführen"? Können Sie erklären? –

+0

http://www.sourceware.org/binutils/docs-2.16/binutils/strip.html Mit -g, wird Ihr Code etwas größer als ohne sein. Es gibt keine Möglichkeit, Debugging-Symbole einfach hinzuzufügen, aber Sie können sie einfach mit strip entfernen. – Mikeage

0

gdb funktioniert ohne die Symbole; es ist nur, dass die Ausgabe dann viel weniger nützlich ist.

  1. Es ist eine Frage der Präferenz. Ich baue alles standardmäßig im Debug-Modus und mache Freigabe, wenn nötig.
  2. Ja.
1

ich glaube nicht, dass es ein großer Unterschied zwischen dem ist Verwendung von gdb in großen, mittleren oder kleinen Projekten, aber für große Projekte yo Sie müssen den für den Build erforderlichen Speicherplatz berücksichtigen, da die Debugging-Informationen die Größe des Objekts und der ausführbaren Dateien erhöhen.

  1. Wenn Sie die Notwendigkeit des Debuggens der gesamten Lösung anfangs unterschätzen, werden Sie wahrscheinlich in Zukunft unter Ihrer Entscheidung leiden. Es ist immer gut, wenn der Build mit oder ohne Debugging-Informationen durchgeführt werden kann, also schreiben Sie Ihre Build-Skripte sorgfältig.
  2. Ja, aber bedenken Sie meine vorherige Antwort. Manchmal könnte das Problem von einem Modul kommen, für das Sie keine Debugging-Informationen haben.
2

In großen Projekten hier, wo ich, dass wir immer mit wortreichste Debug-Informationen möglich bauen arbeiten (wie, ‚-ggdb3‘ für native GDB-Format oder ‚-gdwarf-2 -g3‘ für den Zugriff auf Makros in GDB).

Wenn wir mit dem Debuggen fertig sind, verwenden wir nur den "strip" -Befehl, um alle Debugging-Informationen aus den Binärdateien zu entfernen.

gcc -ggdb3 blah.c -o blah 
strip blah 
0

Sie können jederzeit die irgendwo gespeichert Debug-Version haben, und wenn Sie jemals das Symbol Informationen müssen neu binden, nach dem Debuggen der gestrippt/Release-Version, können Sie einfach gehen „Datei/Pfad“ und GDB wird die Symbole für dieses Ziel erneut lesen. Sie können auch "symbol-file/path" verwenden, um die Symbolinformationen so zu konfigurieren, dass sie an eine entfernte Datei gebunden werden.