Debug c/c++ Using gdb

Debug C/C++ using gdb

Geschrieben von Mostafa Othman | informatik , Programmiertools , c/cpp ,

15 Januar 2025

Debugging C/C++ Code in GDB

 

Inhaltsverzeichnis

  1. Einführung
  2. Einrichtung von GDB
  3. Grundlegende GDB-Befehle
  4. Breakpoints und Watchpoints
  5. Untersuchen von Variablen und Ausdrücken
  6. Steuern der Programmausführung
  7. Analysieren von Stack-Frames
  8. Fortgeschrittene Techniken
  9. Fazit
  10. Literaturverzeichnis

 

1. Einführung

Der GNU Debugger (GDB) ist ein leistungsstarkes Werkzeug, das eine umfassende Umgebung für das Debuggen von C/C++-Anwendungen bietet. Er ermöglicht Entwicklern, den Programmfluss zu analysieren, Variablen zu inspizieren, Breakpoints zu setzen und Schritt für Schritt durch den Code zu gehen, was die Fehlersuche und -behebung erheblich erleichtert. In diesem Artikel werden die Hauptfunktionen und Techniken in GDB erläutert, von den grundlegenden Befehlen bis hin zu fortgeschrittenen Debugging-Strategien.

2. Einrichtung von GDB

Stellen Sie zunächst sicher, dass GDB installiert ist. Auf den meisten Linux-Systemen kann dies mit folgendem Befehl geschehen:

Kompilieren für das Debuggen

Um alle Debugging-Funktionen in GDB zu nutzen, kompilieren Sie Ihren C/C++-Code mit dem -g-Flag. Dieses Flag fügt Debugging-Symbole hinzu, die es GDB ermöglichen, den kompilierten Code mit dem Quellcode zu verknüpfen:

3. Grundlegende GDB-Befehle

Starten Sie das Debuggen mit dem folgenden Befehl:

Sobald GDB läuft, können Sie folgende Befehle nutzen:

  • run: Startet die Programmausführung.
  • quit: Beendet GDB.
  • help: Zeigt Hilfe zu GDB-Befehlen an.

Dies führt das Programm aus, bis es entweder beendet wird oder auf einen Fehler trifft.

4. Breakpoints und Watchpoints

Breakpoints und Watchpoints sind wichtig, um die Programmausführung in GDB zu kontrollieren.

Setzen von Breakpoints

Ein Breakpoint unterbricht die Ausführung an einer bestimmten Stelle. Sie können Breakpoints an einer Zeilennummer oder einem Funktionsnamen setzen:

Setzen von Bedingten Breakpoints

Bedingte Breakpoints unterbrechen die Ausführung, wenn eine bestimmte Bedingung erfüllt ist:

Watchpoints

Watchpoints sind nützlich, um Variablen zu überwachen. Wenn sich der Wert einer Variablen ändert, pausiert GDB die Ausführung:

5. Untersuchen von Variablen und Ausdrücken

Das Überprüfen von Variablen ist ein grundlegender Bestandteil des Debuggens, und GDB bietet verschiedene Befehle dafür.

Anzeigen von Variablen

Mit dem print-Befehl können Sie den Wert von Variablen anzeigen:

Anzeigen von Ausdrücken

Sie können auch Ausdrücke oder Berechnungen ausgeben:

Überwachung von Variablenänderungen

Der display-Befehl aktualisiert automatisch den Wert einer Variablen nach jedem Schritt:

6. Steuern der Programmausführung

GDB bietet verschiedene Befehle, um den Programmfluss zu steuern.

Durch den Code steppen
  • next: Geht zur nächsten Zeile und überspringt Funktionsaufrufe.
  • step: Steigt in Funktionen ein, um detaillierte Inspektionen zu ermöglichen.
Fortsetzen der Ausführung

Mit continue wird die Ausführung nach dem Erreichen eines Breakpoints fortgesetzt:

Ausführen bis zu einer bestimmten Zeile

Der until-Befehl setzt die Ausführung bis zu einer bestimmten Zeile fort:

7. Analysieren von Stack-Frames

GDB bietet Werkzeuge zur Inspektion des Call Stacks, was bei der Fehlersuche in Funktionen und rekursiven Aufrufen hilfreich ist.

Anzeigen des Call Stacks

Der backtrace-Befehl zeigt den Call Stack an und listet die Funktionsaufrufe, die zur aktuellen Ausführungsposition geführt haben:

Jeder Frame im Call Stack repräsentiert einen Funktionsaufruf, und Sie können mit dem frame-Befehl zwischen den Frames wechseln:

8. Fortgeschrittene Techniken

Zusätzlich zu den Grundlagen bietet GDB leistungsstarke Werkzeuge, die das Debuggen weiter erleichtern.

Benutzerdefinierte Befehle

Mit GDB können Sie benutzerdefinierte Befehle für wiederkehrende Aufgaben erstellen. Verwenden Sie hierfür define:

Skripting und Automatisierung

GDB unterstützt Python-Skripte für komplexe Debugging-Aufgaben. Mit einem Python-Skript lassen sich Abläufe automatisieren, benutzerdefinierte Analysen durchführen und Ergebnisse ausgeben.

Remote Debugging

GDB unterstützt Remote-Debugging, sodass Sie Code debuggen können, der auf einem anderen Rechner oder Gerät ausgeführt wird. Starten Sie GDB mit der --remote-Option und verbinden Sie es mit dem entfernten Programm über gdbserver.

9. Fazit 

GDB ist ein vielseitiges und leistungsfähiges Werkzeug für C/C++-Entwickler, das detaillierte Einblicke in das Programmverhalten ermöglicht und zahlreiche Möglichkeiten zur Steuerung der Ausführung und zur Fehlersuche bietet. Ob Anfänger oder erfahrener Entwickler – das Beherrschen der grundlegenden und erweiterten GDB-Befehle und -Techniken kann die Effizienz beim Debuggen erheblich verbessern und die Produktivität insgesamt steigern.

10. Literaturverzeichnis