Linux gdb-Befehl

Linux 命令大全Linux-Befehlsreferenz


GDB (GNU Debugger) ist das am häufigsten verwendete Werkzeug zum Debuggen von Programmen auf Linux-Systemen. Es kann Entwicklern helfen:

  • Den Ablauf der Programmausführung verfolgen
  • Haltepunkte setzen, um die Programmausführung anzuhalten
  • Variablenwerte anzeigen und ändern
  • Ursachen von Programmabstürzen analysieren
  • Den Funktionsaufruf-Stack untersuchen

GDB unterstützt mehrere Programmiersprachen, darunter C, C++, Objective-C, Fortran, Ada usw., und ist ein unverzichtbares Debugging-Tool für Linux-Entwickler.


gdb installieren

Auf den meisten Linux-Distributionen kann gdb einfach über den Paketmanager installiert werden:

Beispiele

# Ubuntu/Debian
sudo apt-get install gdb

# CentOS/RHEL
sudo yum install gdb

# Fedora
sudo dnf install gdb

# Arch Linux
sudo pacman -S gdb

Nach der Installation lässt sich mit dem folgenden Befehl überprüfen, ob die Installation erfolgreich war:

gdb --version

Ein debugfähiges Programm kompilieren

Um ein Programm mit gdb zu debuggen, muss man die-gOption während der Kompilierung zum Erzeugen von Debugging-Informationen:

gcc -g program.c -o program

-gDiese Option bettet Quellcodeinformationen in die ausführbare Datei ein, wodurch gdb Maschinenanweisungen auf den Quellcode abbilden kann.


Grundlegende gdb-Befehle

gdb starten und beenden

Beispiele

# gdb starten und das Programm laden
g ./program

# gdb starten und an einen laufenden Prozess anhängen
gdb -p PID

# gdb beenden
(gdb) quit
# Kurzform
(gdb) q

Programm ausführen

Beispiele

# Programm ausführen
(gdb) run
# Kurzform
(gdb) r

# Mit Argumenten ausführen
(gdb) run arg1 arg2

Breakpoint-Verwaltung

Beispiele

# Breakpoint an der angegebenen Zeile setzen
(gdb) break 10
# Kurzform
(gdb) b 10

# Breakpoint am Funktionseintritt setzen
(gdb) break main
(gdb) break function_name

# Alle Breakpoints anzeigen
(gdb) info breakpoints

# Haltepunkte löschen
(gdb) delete 1  # Haltepunkt Nummer 1 löschen
(gdb) delete    # Alle Haltepunkte löschen

Steuerung der Programmausführung

Beispiele

# Ausführung bis zum nächsten Haltepunkt fortsetzen
(gdb) continue
# Kurzform
(gdb) c

# Einzelschritt ausführen (in Funktionen hineinspringen)
(gdb) step
# Kurzform
(gdb) s

# Einzelschritt ausführen (Funktionen überspringen)
(gdb) next
# Kurzform
(gdb) n

# Aktuelle Funktion zu Ende ausführen und zurückkehren
(gdb) finish

Code anzeigen

Beispiele

# Code in der Nähe der aktuellen Zeile anzeigen
(gdb) list
# Kurzform
(gdb) l

# Code in der Nähe der angegebenen Zeile anzeigen
(gdb) list 15

# Den Code der angegebenen Funktion anzeigen
(gdb) list main

Variablen und Speicher untersuchen

Beispiele

# Variablenwert ausgeben
(gdb) print variable_name
# Kurzform
(gdb) p variable_name

# Variablenwert ändern
(gdb) print variable_name = new_value

# Variablentyp anzeigen
(gdb) ptype variable_name

# Speicherinhalt anzeigen
(gdb) x/10xw &variable  # 10 Wörter in Hexadezimal anzeigen

Aufrufstapelanalyse

Beispiele

# Aufrufstapel anzeigen
(gdb) backtrace
# Kurzform
(gdb) bt

# Zum angegebenen Stackframe wechseln
(gdb) frame 2
# Kurzform
(gdb) f 2

Fortgeschrittene Debugging-Techniken

Bedingte Haltepunkte

Beispiele

# Haltepunkt auslösen, wenn i gleich 5 ist
(gdb) break 10 if i == 5

监视点

Beispiele

# Anhalten, wenn die Variable geändert wird
(gdb) watch variable_name

# Anhalten, wenn die Variable gelesen wird
(gdb) rwatch variable_name

# Anhalten, wenn die Variable gelesen oder geändert wird
(gdb) awatch variable_name

Multithread-Debugging

Beispiele

# Alle Threads anzeigen
(gdb) info threads

# Zum angegebenen Thread wechseln
(gdb) thread 2

# Nur dem aktuellen Thread die Ausführung erlauben
(gdb) set scheduler-locking on

Core-Dump-Dateien debuggen

Beispiele

# Core-Dump-Datei laden
gdb ./program core

# Call-Stack zum Zeitpunkt des Absturzes anzeigen
(gdb) bt

Grafische Oberfläche von gdb

gdb unterstützt außerdem einen grafischen Oberflächenmodus, der mit dem Befehl gestartet werden kann-tuioption:

gdb -tui ./program

Oder wechseln Sie während der Verwendung dorthin:

Beispiele

(gdb) layout src  # Quellcodefenster anzeigen
(gdb) layout asm  # Assembly-Fenster anzeigen
(gdb) layout regs # Registerfenster anzeigen
(gdb) layout split # Quellcode und Assembly gleichzeitig anzeigen

Praktische gdb-Konfiguration

Sie können gängige Konfigurationen zur~/.gdbinitDatei:

Beispiele

# Pretty-Printing aktivieren
set print pretty on

# Verlaufsgröße festlegen
set history save on
set history size 1000

# Benutzerdefinierte Befehle
define printarray
    set $i = 0
    while $i < $arg0
        printf "array[%d] = %dn", $i, $arg1[$i]
        set $i = $i + 1
    end
end

Fehlerbehebung bei häufigen Problemen

Quellcode kann beim Debuggen nicht angezeigt werden

  1. Stellen Sie sicher, dass die-gOption bei der Kompilierung verwendet wird
  2. Prüfen Sie, ob sich der Quellcode am selben Ort befindet wie zur Kompilierungszeit
  3. Verwenden Sie diedirectoryBefehl zum Hinzufügen des Quellcodepfads:
(gdb) directory /path/to/source

Debuggen von optimiertem Code

Die Optimierung kann die Ausführungsreihenfolge des Codes ändern, was das Debuggen erschwert. Es wird empfohlen, die Optimierung beim Debuggen zu deaktivieren:

gcc -O0 -g program.c -o program

Zusammenfassung

gdb ist ein leistungsstarkes Debugging-Tool unter Linux. Wenn Sie es beherrschen, können Sie die Debugging-Effizienz erheblich verbessern. In diesem Artikel wurden die grundlegende Verwendung und die gängigen Befehle von gdb vorgestellt. Lesern wird empfohlen, dieses Wissen durch praktische Debugging-Übungen zu festigen. Mit zunehmender Erfahrung werden Sie feststellen, dass gdb Ihnen helfen kann, verschiedene komplexe Debugging-Probleme zu lösen.


Linux 命令大全Linux-Befehlsreferenz

Weitere Erweiterungen