So verwenden Sie GDB zum Debuggen von Programmen in Ubuntu 20.04

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 int main() { for (int i=0; i<5; ++i) { printf("Iterator: %dn", i); } Rückgabe 0; }

C-Programm mit GCC kompilieren

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

Programm kompilieren

Eine ausführbare Datei mit dem Namen bin wird angezeigt.

Führen Sie das Testprogramm aus

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

Führen Sie die Testanwendung aus

Die Ausgabe des Codes wird angezeigt.

Debuggen einer Anwendung unter Linux

Debugger starten

Führen Sie das GDB-Dienstprogramm mit dem folgenden Befehl im Terminal aus:

$ gdb bin

Debug-Programm mit GDB

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

Debug-Ausgabe

Breakpoints debuggen

Haltepunkte hinzufügen

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

Haltepunkt in GDB hinzufügen

Alternativ kann auch eine Zeilennummer verwendet werden, um einen Haltepunkt hinzuzufügen.

(gdb) Pause 6

Haltepunkt nach Zeilennummer in GDB hinzufügen

Enter den Befehl run und das Programm wird am Haltepunkt angehalten.

Debuggen von Programmen mit Haltepunkten

Durchlaufen von Breakpoints

Verwenden Sie den Befehl Weiter, um die Ausführung des Programms fortzusetzen.

(gdb) weiter

GDB-Weiterleitungsbefehl

Es gibt zwei weitere Befehle für unterschiedliche Zwecke, um die Ausführung des Programms fortzusetzen:

  • Schritt: Durchläuft die nächste Maschinenanweisung.
  • Weiter: Schritte zur nächsten Codezeile.

Es können auch Abkürzungen von Befehlen verwendet werden. Die Abkürzung des Continue-Befehls lautet c.

(gdb) c

Verknüpfung für Fortsetzungsbefehl

Informationen zu Haltepunkten

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

Informationen zu Haltepunkten

Die Informationen zu Haltepunkten werden angezeigt.

Hinweis: Die Nummer links vom Haltepunkt wird verwendet, um von anderen Befehlen darauf zu verweisen.

Haltepunkte löschen

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

Löschen von Btreakpoints in GDB

Jetzt ist der Breakpoint gelöscht und wenn er ausgeführt wird, wird das Programm direkt bis zum Ende ausgeführt.

Variablen beobachten

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

Variableninhalt anzeigen

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

Beobachten Sie den Wert einer Variablen mit GDB

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

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

Haltepunkt löschen

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

Debuggen fortsetzen

Mit demselben Befehl können auch weitere Iterationen des Programms beobachtet werden.

Iterationen ansehen

Debugger beenden

Führen Sie den folgenden Befehl im Terminal aus, um den Debugger zu beenden.

(gdb) beenden

Beenden Sie das Debuggen

Dies close gdb-Dienstprogramm und die Standard-Befehlszeilenaufforderung werden angezeigt.

Fazit

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.