GNU Debugger (GDB) ist ein Open-Source-Debugger für GNU-Systeme. Der Debugger ist portabel und kann für mehrere Sprachen wie C/C++ und Fortran verwendet werden. Es kann zum Debuggen von Programmen verwendet werden, indem deren Status an bestimmten Breakpoints beobachtet und sogar der Fluss oder die Werte für die weitere Ausführung geändert werden. Normalerweise läuft die GDB in der Befehlszeile, aber auch mehrere GUIs wurden dafür entwickelt.
In diesem Artikel untersuchen wir, wie Sie C-Programme mit GDB in Ubuntu 20.04 LTS (Focal Fossa) debuggen.
Voraussetzungen
- Ubuntu 20.04-System
- Benutzer mit sudo Berechtigungen zum Umbenennen mehrerer Dateien.
Notiz: Die in diesem Artikel besprochenen Befehle wurden getestet auf Ubuntu 20.04 LTS (Fokusfossa).
Pakete installieren
Installieren Sie die erforderlichen GN-Pakete zum Kompilieren und Debuggen. Führen Sie den folgenden Befehl im Terminal aus:
$ sudo apt install gcc gdb -y
C-Programm example zum Debuggen
Code
Vor der Ausführung muss ein Programm kompiliert werden. Wir werden den folgenden C-Code in die Datei main.c kompilieren.
#include Normalerweise wird ein C-Code in GCC mit dem folgenden Befehl kompiliert: $ gcc main.c -o bin Ein weiteres Argument muss angegeben werden, um Symbole in die Binärdatei einzuschließen. Diese Symbole werden von GDB verwendet, um das Programm zu verfolgen und zu debuggen. Führen Sie den folgenden Befehl im Terminal aus, um den C-Code zu kompilieren: $ gcc -g main.c -o bin Eine ausführbare Datei mit dem Namen bin wird angezeigt. Die Binärdatei namens bin kann wie jede andere ausführbare Datei auf einer Befehlszeilenschnittstelle ausgeführt werden. Verwenden Sie den folgenden Befehl, um es im Terminal auszuführen: $ ./bin Die Ausgabe des Codes wird angezeigt. Führen Sie das GDB-Dienstprogramm mit dem folgenden Befehl im Terminal aus: $ gdb bin Drücken Sie Enter. Die Konsole für das GDB-Terminal wird angezeigt. Enter den Befehl run in dieser Konsole, um die ausführbare Datei auszuführen, die dem Dienstprogramm als Argument zur Verfügung gestellt wird. (gdb) laufen Breakpoints können auf verschiedene Weise hinzugefügt werden. Wir werden in unserem Code einen Haltepunkt für die printf-Funktion hinzufügen. Führen Sie den folgenden Befehl im Terminal aus, um einen Haltepunkt hinzuzufügen: (gdb) break printf Alternativ kann auch eine Zeilennummer verwendet werden, um einen Haltepunkt hinzuzufügen. (gdb) Pause 6 Enter den Befehl run und das Programm wird am Haltepunkt angehalten. Verwenden Sie den Befehl Weiter, um die Ausführung des Programms fortzusetzen. (gdb) weiter Es gibt zwei weitere Befehle für unterschiedliche Zwecke, um die Ausführung des Programms fortzusetzen: Es können auch Abkürzungen von Befehlen verwendet werden. Die Abkürzung des Continue-Befehls lautet c. (gdb) c Informationen zu Haltepunkten können mit dem info-Befehl von gdb beobachtet werden. Führen Sie den folgenden Befehl im Terminal aus: (gdb) Info-Haltepunkte Die Informationen zu Haltepunkten werden angezeigt. Hinweis: Die Nummer links vom Haltepunkt wird verwendet, um von anderen Befehlen darauf zu verweisen. Ein Breakpoint kann mit dem delete-Befehl und unter Bezugnahme auf die Breakpoint-Nummer in der Ausgabe des Info-Dienstprogramms gelöscht werden. (gdb) löschen 1 Jetzt ist der Breakpoint gelöscht und wenn er ausgeführt wird, wird das Programm direkt bis zum Ende ausgeführt. Variablen können mit dem Watch-Dienstprogramm beobachtet werden. Zuerst müssen wir den Gültigkeitsbereich eingeben, in dem die Variable existiert. Fügen Sie dazu zunächst einen Breakpoint mit dem folgenden Befehl hinzu: (gdb) Pause 6 Führen Sie dann den Code aus, der diesen Haltepunkt erreicht. (gdb) r Jetzt sind wir in der Schleife, in der die Variable i existiert. Der Befehl watch wird verwendet, um den vorherigen und den neuen Wert der Variablen i in der Schleife zu beobachten. (gdb) schaue ich Nun erscheint der durch den Befehl watch erzeugte Breakpoint auch in der Liste der Breakpoints. Die Liste der Breakpoints kann mit dem folgenden Befehl angezeigt werden: (gdb) Info-Haltepunkte Außerdem brauchen wir den zuvor eingefügten Breakpoint nicht. Es kann einfach mit dem folgenden Befehl entfernt werden: (gdb) löschen 1 Wenn nun fortgefahren wird, zeigt der Code immer dann Werte an, wenn die Variable den Wert geändert hat, und zeigt sowohl alte als auch neue Werte an. (gdb) c Mit demselben Befehl können auch weitere Iterationen des Programms beobachtet werden. Führen Sie den folgenden Befehl im Terminal aus, um den Debugger zu beenden. (gdb) beenden Dies close gdb-Dienstprogramm und die Standard-Befehlszeilenaufforderung werden angezeigt. In diesem Artikel haben wir untersucht, wie ein Programm in GDB ausgeführt und unterbrochen wird. Darüber hinaus wurde es auch so konfiguriert, dass es sich selbst unterbricht, wenn sich der Wert einer Variablen ändert. Wir hoffen, dass Sie Ihre Programme in GDB leicht debuggen können, nachdem Sie diesen Artikel befolgt haben.C-Programm mit GCC kompilieren
Führen Sie das Testprogramm aus
Debuggen einer Anwendung unter Linux
Debugger starten
Breakpoints debuggen
Haltepunkte hinzufügen
Durchlaufen von Breakpoints
Informationen zu Haltepunkten
Haltepunkte löschen
Variablen beobachten
Debugger beenden
Fazit