GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

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 Zustände an bestimmten Haltepunkten 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 es wurden auch mehrere GUIs dafür entwickelt.

In diesem Artikel untersuchen wir, wie man C-Programme mit GDB in Ubuntu 20.04 LTS (Focal Fossa) debuggt.

Voraussetzungen

  • Ubuntu 20.04-System
  • Benutzer mit sudo-Berechtigungen zum Umbenennen mehrerer Dateien.

Hinweis: Die in diesem Artikel besprochenen Befehle wurden auf Ubuntu 20.04 LTS getestet (Fokusfossa).

Pakete installieren

Installieren Sie erforderliche GN-Pakete zum Kompilieren und Debuggen. Führen Sie den folgenden Befehl im Terminal aus:

$ sudo apt install gcc gdb -y

C-Programmbeispiel 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 <stdio.h>

int main() {

for (int i=0; i<5; ++i) {
printf("Iterator: %d\n", i);
}
return 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 einzuschließen in der binären. 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 namens bin erscheint.

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

Die Ausgabe des Codes erscheint.

Debuggen einer Anwendung unter Linux

Debugger starten

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

$ gdb bin

Drücken Sie Eingabe. Die Konsole für das GDB-Terminal wird angezeigt. Geben Sie den Lauf ein Befehl in dieser Konsole, um die dem Dienstprogramm als Argument bereitgestellte ausführbare Datei auszuführen.

(gdb) run

Debug-Haltepunkte

Haltepunkte hinzufügen

Haltepunkte können auf verschiedene Weise hinzugefügt werden. Wir werden einen Breakpoint auf printf hinzufügen Funktion in unserem Code. 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) break 6

Geben Sie den Lauf ein Befehl und das Programm stoppt am Haltepunkt.

Haltepunkte durchlaufen

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

(gdb) continue

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

  • Schritt:Geht durch die nächste Maschinenanweisung.
  • Weiter:Geht durch die nächste Codezeile.

Es können auch Abkürzungen von Befehlen verwendet werden. Wie die Abkürzung von weiter Befehl ist c.

(gdb) c

Informationen zu Haltepunkten

Informationen über Breakpoints können mit info eingesehen werden Befehl von gdb . Führen Sie den folgenden Befehl im Terminal aus:

(gdb) info breakpoints

Die Informationen zu Haltepunkten werden angezeigt.

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

Haltepunkte löschen

Ein Haltepunkt kann mit Löschen gelöscht werden Befehl und durch Bezugnahme auf die Breakpoint-Nummer, die in der Ausgabe von info beobachtet wird Dienstprogramm.

(gdb) delete 1

Jetzt wurde der Haltepunkt gelöscht und wenn es ausgeführt wird, wird das Programm direkt bis zum Ende ausgeführt.

Variablen beobachten

Variablen können mit dem Überwachungsdienstprogramm überwacht werden. Zuerst müssen wir den Geltungsbereich eingeben, in dem die Variable existiert. Fügen Sie dazu zunächst einen Haltepunkt mit folgendem Befehl hinzu:

(gdb) break 6

Führen Sie dann den Code aus, der diesen Haltepunkt erreicht.

(gdb) r

Jetzt sind wir in der Schleife, wo die Variable i existiert.

Die Uhr Befehl wird verwendet, um den vorherigen und neuen Wert der Variablen i zu beobachten in der Schleife.

(gdb) watch i

Nun der von watch generierte Haltepunkt Der Befehl wird auch in der Liste der Haltepunkte angezeigt. Die Liste der Haltepunkte kann mit dem folgenden Befehl angezeigt werden:

(gdb) info breakpoints

Außerdem brauchen wir den zuvor eingefügten Haltepunkt nicht. Es kann einfach mit dem folgenden Befehl entfernt werden:

(gdb) delete 1

Wenn Sie jetzt fortfahren, 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

Weitere Iterationen des Programms können ebenfalls beobachtet werden, indem derselbe Befehl verwendet wird.

Debugger beenden

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

(gdb) quit

Dies schließt gdb und die standardmäßige Eingabeaufforderung für die Befehlszeile wird angezeigt.

Schlussfolgerung

In diesem Artikel haben wir untersucht, wie man ein Programm in GDB ausführt und unterbricht. Darüber hinaus wurde es auch so konfiguriert, dass es sich selbst unterbricht, wenn sich der Wert einer Variablen geändert hat. Wir hoffen, dass Sie Ihre Programme in GDB problemlos debuggen können, nachdem Sie diesem Artikel gefolgt sind.


Ubuntu
  1. So verwenden Sie den Befehl zum Herunterfahren von Linux in Ubuntu 18.04 und CentOS 7

  2. So verwenden Sie den Uptime-Befehl in Ubuntu Linux

  3. So verwenden Sie den tail-Befehl in Ubuntu Linux

  4. Verwendung von ssh-keyscan unter Ubuntu

  5. Verwendung des SSH-Agenten unter Ubuntu

So verwenden Sie den cd-Befehl unter Linux

So installieren und verwenden Sie den Curl-Befehl unter Ubuntu 20.04

So verwenden Sie den Befehl tcpdump in Ubuntu 20.04

So installieren und verwenden Sie Busybox in Ubuntu

So verwenden Sie Ubuntu

So installieren und verwenden Sie den Exa-Befehl unter Ubuntu 20.04