GDB - Debugging Programme


Advertisements

Erste Schritte: Starten und Stoppen

  • 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

Schreiten durch den Code

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 oder Watchpoints

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

    • Setzt einen Haltepunkt bei Zeile 45, oder zum myfunction. Das Programm wird angehalten, wenn es den Haltepunkt erreicht
  • 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

    • Löscht Haltepunkt N (Haltepunkte sind nummeriert, wenn erstellt).

Einstellung Variablen

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

    • Sets x zu einem Satz wert (3) oder auf eine andere Variable (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

    • Entfernt das konstante anzeige, von einer variablen angezeigt, durch Anzeigebefehl.

Backtrace und Ändern von Frames

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

    • Rückgabe von aktuellen Funktion.
  • Flurförderzeuge Signale

    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.

    Advertisements