GDB

Die Übersichtlichkeit der Seite wird durch Javascript erhöht. Ist dies aktiviert, werden die Texte unter den Überschriften durch Anklicken der Überschriften ein- und ausgeblendet.

Der GNU Debugger ist ein hilfreiches Komandozeilenwerkzeug, mit dem es möglich ist, ein Programm zu Debuggen.

Vorbedingungen

Natürlich muss der gdb im Vorfeld installiert werden.

Das Programm muss mit der Compilerotion -g kompiliert werden, damit die Debuggerinformationen bereit stehen.

nach oben

Vorgehen

Programm dem Debugger übergeben

gdb programmname

nach oben

Listing

Mit dem Befehl list wird der Programmcode standardmäßig 10 Zeilenweise ausgegeben. Bei wiederholten eingeben werden die folgenden Zeilen aufgelistet.

nach oben

Breakpoint setzen

Möchte man den Programmablauf an einer bestimmten Stelle unterbrechen, so setzt man einen sogenannten Breakpoint. Dies ist einfach mit dem Befehl break zeilennummer möglich. Ein breakpoint kann auch von einer bestimmten Bedingung abhängig gemacht werden:

break Zeilennummer if (Bedingung)

Wobei die Bedingung Variablen des aktuellen Programms enthalten kann und der Ausdruck der Syntax einer Programmiersprache, die gdb verständlich ist entsprechen muss.

Bedingungen eines bedingten breakpoints ändern

Dies ist mit dem Befehl condition möglich

nach oben

Bereakpoints anzeigen

Mit 'info break' können alle breakpoints aufgelistet werden.

nach oben

Breakpoints löschen / deaktivieren

Hierzu dienen die Befehle:

  • clear
  • delete
  • disable

nach oben

Breakpoint reaktivieren

Ein mit disable deaktivierter Breakpoint kann mit 'enable' einfach wieder aktiviert werden.

nach oben

Watchpoint setzen

Im Gegensatz zum Breakpoint ist, hält ein Watchpoint an, wenn eine bestimmte Bedingung erfüllt ist.

nach oben

Programm starten

Das Programm wird dann mit dem Befehl run gestartet. Und läuft ganz normal bis zum Breakpoint.

nach oben

Tracen

step - In Funktionen absteigen

Führt die nächste Codezeile aus und springt dabei auch in eventuell aufgerufene Funktionen ab.

nach oben

next - Funktion ausführen und im aktuellen Codeblock weiter machen

Führt die nächste Codezeile aus ohne eine darin vorkommende Funktion zu tracen. Die Funktion wird stillschweigend ausgeführt und es geht mit der weiteren Bearbeitung innerhalb des aktuellen Codeblocks nach der Ausführung der Funktion weiter.

nach oben

Übersicht über den Quellcode an der aktuellen Stelle

Einfach wie gewohnt list eingeben.

nach oben

Bis zu einer bestimmten Zeile weitergehen

until Zeilennummer

nach oben

Wert anzeigen

Der Befehl print zeigt den Wert einer Variable an:

print Variablenname

nach oben

Wert setzten

Mit dem Befehl print kann auch ein Wert gesetzt werden um das Verhalten bei einem bestimmten Wert einer Variable zu studieren.

print Variablenname = neuerWERT

Die angezeigten $-Werte sind interne Variablen, die für die Variable stehen. Somit kann der Wert der Variable auch einfach angezeigt werden durch:

print $Variablennummer

nach oben

Typ anzeigen

Mit dem Befehl ptype läst sich der Typ eines Ausdrucks anzeigen:

ptype Variablenname

nach oben

Speicherwerte anzeigen

Der Befehl lautet einfach: x

x kann man eine Speicheradresse übergeben. x akzeptiert zusätzlich einen Zähler und eine Typdefinition als optionales Argument übergeben werden. Der Zähler gibt an wieviele Objekte des definierten Typs angezeigt werden sollen. Beispiel:

x/100x 0x4200

zeigt 100 Bytes an Daten in hexadezimaler Darstellung ab der Adresse 0x4200 an.

Die möglichen Ausgabeformate lassen sich mit 'help x' anzeigen.

nach oben

Infos anzeigen

help info zeigt alle Möglichkeiten. Hier einige nützliche:

info program

zeigt Informationen zum Ablaufstatus des Programms

nach oben

info locals

Zeigt alle Namen und Werte der aktuellen Funktion an

nach oben

info variables

Zeigt alle Variablen die den Programm bekannt sind, auch die aus eingebundenen Bibliotheken an, wobei die Programmfremden Variablen ohne Wert aufgelistet werden.

nach oben

info break

Zeigt eine Liste aller Breakpoint und Watchpoints samt ihres Status an.

nach oben

Aktuelle Funktion bis zu ihren Ende ablaufen lassen

finish

nach oben

GDB beenden

quit

nach oben