gcc -g myprogram.c
Kompiliert myprogram.c mit der Fehlersuchoption (-g). Sie erhalten immer noch a.out, aber es Debug-Informationen, die Sie lassen Variablen und Funktionsnamen zu verwenden innerhalb GDB, anstatt roh Speicherplätze (nicht lustig) können enthält.
gdb a.out
Öffnet GDB mit Datei a.out, aber nicht das Programm auszuführen. Hier finden Sie eine Eingabeaufforderung (gdb) zu sehen -. Alle Beispiele sind von diesem Eingabeaufforderung.
r
r arg1 arg2
r < file1
Drei Wege zum "a.out", die zuvor geladen. Sie können es direkt (r) ausgeführt wird, übergeben Argumente (r arg1 arg2) oder Futter in einer Datei. Du wirst in der Regel Breakpoints setzen, bevor Sie Laufen.
Hilfe
h Haltepunkte
Listet Hilfethemen (Hilfe) oder bekommt Hilfe zu einem bestimmten Thema (h Haltepunkte). GDB ist gut dokumentiert.
q - Beenden Sie GDB
Schritt können Sie verfolgen den Pfad des Programms und Null in auf den Code, der abstürzt, bzw. Rückkehr ungültige Eingabe.
l
l 50
l myfunction
Listet 10 Zeilen Quellcode für die aktuelle Zeile (l), einer bestimmten Zeile (l 50), oder für eine Funktion (l myfunction).
neben
Führt das Programm bis zum nächsten Zeile, dann Pause. Wenn die aktuelle Zeile ist eine Funktion, die gesamte Funktion ausführt, dann pausiert. neben ist gut für das Gehen durch ,ihren Code schnell.
Schritt
Führt die nächste Anweisung, keine Linie. Wenn der aktuelle Befehl das Setzen einer Variablen, ist es das gleiche wie neben . Wenn es sich um eine Funktion, wird es in der Funktion zu springen, führen die erste Aussage, dann Pause. Schritt ist gut für das Tauchen in die Einzelheiten über Ihren Codes.
finish
Ausführung beendet die aktuelle Funktion, dann Pause (auch Schritt heraus bezeichnet). Nützlich, wenn Sie versehentlich trat in Funktion.
Haltepunkte spielen eine wichtige Rolle bei der debugging. Sie, Pause (Pause) ein Programm, wenn es einen bestimmten Punkt erreicht. Sie können überprüfen und ändern Variablen und setzen die Ausführung. Dies ist hilfreich, wenn einige Eingabefehler auftritt, oder Eingaben zu prüfen sind
brechen 45
brechen myfunction
watch x == 3
Setz einen Watchpoint, die das Programm angehalten, wenn ein Bedingung änderungen (wenn x == 3 Änderungen). Watchpoints sind große für bestimmte Eingänge (myPtr! = NULL), ohne haben zu Pause auf jeder Funktionsaufruf.
fortsetzen
Lebensläufe Ausführung, nachdem er von einem Haltepunkt / Watchpoint angehalten. Das Programm wird fortgesetzt, bis es trifft den nächsten Haltepunkt / Watchpoint.
löschen N
Anzeigen und Ändern von Variablen zur Laufzeit ist ein kritisch Teil der Debugging. Versuchen Sie, die Bereitstellung ungültigen Eingaben auf Funktionen oder das Ausführen anderer Testfälle, um die Ursache von Problemen zu finden. In der Regel werden Sie Ansicht / Satz-Variablen, wenn das Programm angehalten wird.
Drucke x
Druck aktuellen Wert der Variablen x. In der Lage zu verwenden die ursprünglichen Variablennamen ist, warum die (-g) Flagge ist erforderlich ; Programme regelmäßig zusammengestellt haben diese Informationen entfernt werden.
Setz x = 3
Setz x = y
Anruf myfunction()
Anruf myotherfunction(x)
Anruf strlen(mystring)
Anrufe, benutzer definierten oder Systemfunktionen. Dies ist äußerst nützlich, aber hüte dich vor den Aufruf Buggy Funktionen.
Anzeige, x
zeigt ständig den Wert der Variablen x, die nach jedem Schritt oder Pause gezeigt wird. Nützlich, wenn Sie ständig überprüft werden für einen bestimmten Wert.
Ausblenden des Logos, x
Ein Stapel ist eine Liste der aktuellen Funktionsaufrufe - es zeigt Ihnen, wo Sie im Programm sind. A Rahmen speichert die Details einer einzigen Funktionsaufruf, wie die Argumente.
bt
Backtraces oder druckt die aktuelle Funktion Stapel zu zeigen, wo Sie im aktuellen Programm sind. Wenn Haupt Anrufe funktionieren a (), welche aufruft b (), welche aufruft c () , die Backtrace ist.
c <= current location b a main
nach oben
unten
bewegen Sie zum nächsten Rahmen nach oben oder unten in der Funktion Stapel. Wenn Sie in der c Sie können bewegen Sie auf b oder a , um lokale Variablen zu untersuchen.
Rückkehr
Die Signale werden Nachrichten geworfen nach bestimmten Ereignissen, wie beispielsweise ein Timer oder Fehler . GDB kann angehalten, wenn er ein Signal auftritt; möchten Sie vielleicht, um sie statt zu ignorieren.
handhaben[signalname] [action]
handhaben SIGUSR1 nostop
handhaben SIGUSR1 noprint
handhaben SIGUSR1 ignore
Weisen Sie GDB, um ein bestimmtes Signal zu ignorieren (SIGUSR1), wenn er auftritt. Es gibt unterschiedliche Ebenen der ignoriert.