GNU -Debugger oder GDB Ein leistungsstarkes Quellcode -Debugging -Tool für Linux -Programme

GNU -Debugger oder GDB Ein leistungsstarkes Quellcode -Debugging -Tool für Linux -Programme

Ein Debugger spielt eine wichtige Rolle in jedem Softwareentwicklungssystem. Niemand kann auf einmal einen fehlerfreien Code schreiben. Im Verlauf der Entwicklung werden Fehler erhoben und müssen für eine weitere Verbesserung gelöst werden. Ein Entwicklungssystem ist ohne Debugger unvollständig. In Anbetracht der Open -Source -Entwickler -Community ist GNU Debugger ihre beste Wahl. Es wird auch für die Entwicklung kommerzieller Softwareentwicklung auf UNIX -Typ -Plattformen verwendet.

Debugging Quellcode mit GNU -Debugger

GNU -Debugger, auch bekannt als GDB, ermöglicht es uns, den Code durchzuschleichen, während er ausgeführt wird oder was ein Programm im Moment zu tun hat, bevor es abstürzte. GDB hilft uns im Grunde, vier wichtigste Dinge zu tun, um Fehler im Quellcode zu fangen.

  1. Starten Sie das Programm und geben Sie Argumente an, die das allgemeine Verhalten beeinflussen können.
  2. Stoppen Sie das Programm unter bestimmten Bedingungen.
  3. Untersuchen Sie den Absturz oder wann das Programm gestoppt wurde.
  4. Ändern Sie den Code und experimentieren Sie sofort mit dem geänderten Code.

Wir können GDB verwenden, um Programme zu debuggen, die geschrieben wurden C und C ++ ohne viel Aufwand. Unterstützung für andere Programmiersprachen wie jetzt wie D, Modula-2, Forran sind teilweise.

Erste Schritte mit GNU Debugger oder GDB

GDB wird mit dem aufgerufen GDB Befehl. Bei der Ausstellung GDB, Es zeigt einige Informationen über die Plattform und lässt Sie in die (in die (GDB) Eingabeaufforderung wie unten gezeigt.

[[E -Mail geschützt] ~]# GDB
Probenausgabe
GNU GDB (GDB) Fedora 7.6.50.20130731-19.FC20 Copyright (C) 2013 Free Software Foundation, Inc. Lizenz GPLV3+: GNU GPL Version 3 oder später ist diese kostenlose Software: Sie können es kostenlos ändern und neu verteilt. Es gibt keine Garantie, sofern dies gesetzlich zulässig ist. Geben Sie "Copying" und "Garantie" für Details ein. Dieses GDB wurde als "x86_64-redhat-linux-gnu" konfiguriert. Geben Sie "Konfiguration anzeigen" für Konfigurationsdetails ein. Für Anweisungen zur Fehlerberichterstattung finden Sie unter: . Finden Sie das GDB -Handbuch und andere Dokumentationsressourcen online unter: . Für Hilfe, geben Sie "Hilfe" ein. Geben Sie "APROPOS Word" ein, um nach Befehlen zu suchen, die sich auf "Wort" beziehen. (GDB)

Typ Hilfe Listen Sie die verschiedenen Klassen von Befehlen in GDB auf. Typ Hilfe gefolgt von einem Klassennamen für eine Liste von Befehlen in dieser Klasse. Typ Hilf allen Für die Liste aller Befehle. Befehlsname Abkürzungen sind erlaubt, wenn sie eindeutig sind. Zum Beispiel können Sie eingeben N anstatt tippen nächste oder C für weitermachen usw.

Am häufigsten verwendete GDB -Befehle

Häufig verwendet GDB -Befehle sind in der folgenden Tabelle aufgeführt. Diese Befehle sind von der GDB -Eingabeaufforderung zu verwenden (Eingabeaufforderung (GDB).

Befehl Beschreibung
laufen Starten Sie eine Programmausführung
aufhören GDB verlassen
Druckausdruck Ausdruck drucken, wo Expr Kann auch ein variabler Name sein
nächste In die nächste Zeile gehen
Schritt Schritt in die nächste Zeile
weitermachen Fahren Sie von der aktuellen Linie bis zum Ende des Programms oder des nächsten Break -Punktes fort

Beachten Sie den Unterschied zwischen den beiden Befehlen Schritt Und nächste. Der nächste Der Befehl geht nicht in die Funktion, wenn die nächste Zeile ein Funktionsaufruf ist. Wohingegen Schritt Der Befehl kann in der Funktion eingehen und sehen, was dort passiert.

Eine Beispielsitzung mit GDB

Betrachten Sie den folgenden Quellcode.

// Summe.c #include int sum (int a, int b) int c; c = a + b; Rückkehr C;  int main () int x, y, z; printf ("\ nenter die erste Nummer:"); scanf ("%d", & x); printf ("die zweite Nummer eingeben:"); scanf ("%d", & y); z = sum (x, y); printf ("Die Summe ist %d \ n \ n", z); Rückkehr 0; 

Um die Ausgabedatei zu debuggen, müssen wir dasselbe mit kompilieren -G Option zu GCC folgendermaßen.

$ gcc -g summe.c -o sum

Die Ausgabedatei Summe kann über einen der folgenden 2 Wege an GDB angeschlossen werden:

1. Indem Sie die Ausgabedatei als Argument für GDB angeben.

$ gdb sum

2. Ausgangsdatei in GDB ausführen Datei Befehl.

$ GDB (GDB) Dateisumme

Der Liste Der Befehl listet Zeilen in der Quellcodedatei auf und verschiebt den Zeiger. So zuerst Liste Zeigt die ersten 10 Zeilen an und die nächste Liste Zeigt die nächsten 10 an und so weiter.

(GDB) Liste 1 #include 2 3 int sum (int a, int b) 4 int c; 5 C = A + B; 6 Return C; 7 8 9 int main () 10 int x, y, z;

Um die Ausführung zu starten, geben Sie die aus laufen Befehl. Jetzt wird das Programm normal ausgeführt. Aber wir haben vergessen, einige Haltepunkte in den Quellcode zum Debuggen zu setzen, richtig? Diese Haltepunkte können für Funktionen oder in bestimmten Zeilen angegeben werden.

(GDB) B Main

Notiz: Ich habe eine Abkürzung verwendet B für brechen.

Nach dem Einstellen des Breaking Point bei der Hauptfunktion bleibt das Programm in der Linie 11 nach. Das Gleiche kann in Kraft getreten werden, wenn die Leitungsnummer zuvor bekannt ist.

(GDB) B Summe.C: 11

Treten Sie nun die Codezeilen mit der nächste oder N Befehl. Es ist wichtig sich das zu merken nächste Der Befehl geht in den Funktionscode nicht in den Funktionscode ein, es sei denn. Probieren wir das aus drucken Befehl jetzt. Setzen Sie den Break -Point in der Funktionssumme wie unten.

(GDB) B Summe Breakpoint 1 bei 0x4005AA: Dateisumme.C, Zeile 5. (GDB) R Startprogramm: /root /sum.C: 5 5 C = A + B; (GDB) P a $ 1 = 2 (GDB) P B $ 2 = 3 (GDB) C Fortsetzung. Die Summe beträgt 5 [minderwertiger 1 (Prozess 3444), der normal ausging]]

Wenn das ausführende Programm Befehlszeilenparameter erfordert, geben Sie dasselbe zusammen wie die laufen Befehl as.

(GDB) Lauf… 

Freigegebene Bibliotheksdateien, die dem aktuellen laufenden Programm zugeordnet sind.

(GDB) Info teilen von syms.So.2 0x00000035a641f560 0x00000035a6560bb4 Ja /lib64 /libc.So.6

Variablen ändern

GDB ist auch in der Lage, Variablen während der gesamten Ausführung des Programms zu modifizieren. Probieren wir das aus. Wie oben erwähnt, setzen Sie den Break Point in Zeile 16 und führen Sie das Programm aus.

(GDB) R Startprogramm: /root /sum.C: 16 16 printf ("Die Summe ist %d \ n \ n", z); (GDB) Set z = 4 (GDB) C Fortsetzung. Die Summe ist 4

Jetzt a = 1, B = 2 und Ergebnis sollte sein z = 3. Aber hier haben wir das Endergebnis geändert zu z = 4 in der Hauptfunktion. Auf diese Weise kann das Debuggen mit GDB einfacher erleichtert werden.

Breakpoints aktivieren/deaktivieren

Um die Liste aller Haltepunkte zu erhalten Info -Haltepunkte.

(GDB) Info Breakpoints Num Typ Disp ENB -Adresse, was 1 Breakpoint y 0x000000004005C2 in der Hauptsumme in der Summe halten.C: 11

Hier gibt es nur einen Bruchpunkt und es ist zu. Aktiviert deaktiviert die Haltepunkte geben die Haltepunktnummer zusammen mit der an, die deaktivieren Befehl. Um danach zu aktivieren, verwenden Sie die ermöglichen Befehl.

(GDB) Deaktivieren Sie 1 (GDB) Info Breakpoints Num Typ Disp ENB Adresse, welche 1 Haltepunkt N 0x000000004005C2 in der Hauptsumme halten.C: 11

Sie können die Haltepunkte auch mit löschen löschen Befehl.

Debuggen von Laufprozessen

Zahlreiche Prozesse werden im Hintergrund in einem GNU/Linux -System ausgeführt. Um einen laufenden Prozess zu debuggen, müssen wir die Prozess -ID dieses bestimmten Prozesses finden. PIDOF Der Befehl gibt Ihnen die PID eines Prozesses.

$ pidof 

Jetzt müssen wir diese PID an GDB anbringen. Es gibt 2 Wege.

1. Durch Angabe von PID zusammen mit GDB.

$ gdb -p 

2. Verwendung anfügen Befehl von GDB.

(GDB) Anhängen 

Das ist alles fürs Erste. Dies sind nur Grundlagen von GDB, um einen guten Start beim Debugging -Quellcode zu erhalten, und es ist viel mehr als die oben erläuterten Dinge. Zum Beispiel können wir die Stapelinformationen, Umgebungsvariablen und vieles mehr debuggen. Versuchen Sie, mit all diesen Dingen herumzuspielen ..