Debuggen Sie ein C- oder C++-Programm unter Linux mit gdb
Der normale Prozess zur Entwicklung von Computerprogrammen läuft in etwa so ab: Code schreiben, Code kompilieren, Programm ausführen. Wenn das Programm nicht wie erwartet funktioniert, kehren Sie zum Code zurück, um nach Fehlern (Bugs) zu suchen, und wiederholen den Zyklus erneut.
Abhängig von der Komplexität des Programms und der Art der Fehler kann es vorkommen, dass Sie zusätzliche Hilfe bei der Fehlersuche benötigen. Das ist es, was ein „Debugger“ macht. Damit können Sie ein Computerprogramm untersuchen, während es ausgeführt wird. Sie können die Werte der verschiedenen Variablen sehen, Sie können den Speicherinhalt untersuchen und Sie können das Programm an einem bestimmten Punkt anhalten und den Code Zeile für Zeile durchlaufen.
Der primäre Debugger unter Linux ist der GNU-Debugger (gdb). Es könnte bereits auf Ihrem System installiert sein (oder eine abgespeckte Version namens gdb-minimal), aber um sicherzugehen, geben Sie den folgenden Befehl in ein Terminal ein:
Um den Debugger verwenden zu können, müssen Sie den Compiler anweisen, Debug-Informationen in die Binärdatei aufzunehmen. Erstellen Sie mit nano eine Datei namens „hello10.c“:
Kopieren Sie den folgenden Code und fügen Sie ihn ein:
#includemain() { int i; for(i=0;i<10;i++) printf("%d",i); } Das Flag „-g“ weist den Compiler an, Debug-Informationen zu erzeugen. Um das Programm zu kompilieren, verwenden Sie Folgendes:
gcc -g -o hello10 hello10.cSo starten Sie das Debuggen des Programmtyps:
Wenn Sie zu diesem Zeitpunkt einfach mit der Ausführung des Programms beginnen (mit dem Befehl „run“), wird das Programm ausgeführt und beendet, bevor Sie die Möglichkeit haben, etwas zu tun. Um dies zu verhindern, müssen Sie einen „Haltepunkt“ erstellen, der das Programm an einem bestimmten Punkt anhält. Der einfachste Weg, dies zu tun, besteht darin, dem Debugger mitzuteilen, dass er in der Funktion „main()“ anhalten soll:
Starten Sie nun das Programm:
Der Debugger ist bei der ersten ausführbaren Codezeile, z. B. der „for“-Schleife, angehalten. Um zur nächsten Zeile zu gelangen, geben Sie „next“ oder kurz „n“ ein. Verwenden Sie weiterhin „next“, um die Schleife ein paar Mal zu wiederholen:
Um den Wert einer Variablen zu überprüfen, verwenden Sie den Befehl „print“. In unserem Beispielprogramm können wir den Inhalt der Variablen „i“ untersuchen:
Wiederholen Sie dies in der Schleife und noch einige Male und sehen Sie, wie sich „i“ ändert:
nächste nächste nächste nächste drucken iIm obigen Beispiel hat „i“ den Wert 4 erreicht. Die Schleife wird fortgesetzt, solange „i“ kleiner als 10 ist. Sie können den Wert einer Variablen mit „set var“ ändern. Geben Sie Folgendes in gdb ein, um „i“ auf 10 zu setzen.
Setze var i = 10 und drucke i als nächstes ausMöglicherweise müssen Sie ein weiteres „Weiter“ ausführen (abhängig davon, wo das Programm angehalten wurde, als Sie „i“ auf 10 gesetzt haben), aber wenn die „for“-Schleifenzeile das nächste Mal ausgeführt wird, wird die Schleife beendet, da „i“ „nein“ ist länger weniger als 10.
Der „next“-Befehl führt keinen Drilldown in Funktionen durch, sondern die Funktion wird ausgeführt und der Debugger stoppt erneut in der nächsten Zeile nach der Funktion. Wenn Sie in eine Funktion einsteigen möchten, verwenden Sie den Befehl „step“, kurz „s“.
Eine andere Möglichkeit, Ihr Programm zu debuggen, besteht darin, eine Überwachung für eine Variable festzulegen. Dadurch wird das Programm immer dann angehalten, wenn sich die Variable ändert. Starten Sie das Programm erneut, indem Sie „Ausführen“ eingeben. Da das Programm bereits läuft, werden Sie vom Debugger gefragt, ob Sie es noch einmal von vorne starten möchten.
Das Programm stoppt im Hauptprogramm (da wir den Haltepunkt nicht entfernt haben). Stellen Sie nun eine Uhr auf „i“:
Der Befehl „Weiter“ startet das Programm bis zur nächsten Haltepunktbedingung erneut. In diesem Fall wird es erneut ausgeführt, bis sich die Variable „i“ ändert (aufgrund der Überwachung).
Um das Debuggen zu beenden, verwenden Sie einfach den Befehl „quit“.
Wenn Sie mehr über gdb erfahren möchten, ist das ein guter Ausgangspunkt GDB-Dokumentation. Wenn Sie Probleme mit den oben genannten Beispielen haben, nutzen Sie bitte den Kommentarbereich unten und wir werden sehen, ob wir Ihnen helfen können.
Schreibe einen Kommentar