5.2.13
09/23/17
Last Modified 04/23/14 by Walter Tasin
EclipseDebugging Reload Page

Debugging eines C-Projekts mit Eclipse

Allgemeines

Eine integrierte Entwicklungsumgebung (IDE) wie Eclipse unterstützt den Programmierer auch in der Behebung von Programmfehlern.
Solche Programmfehler, die meist auf fehlerhafter oder unzureichender Umsetzung eines Algorithmus beruhen, werden Bugs (=Käfer, Wanze) genannt.
Um solchen Problemen auf die Schliche zu kommen wird ein Debugger genutzt.

Eclipse verwendet den GNU Debugger (gdb) und bietet dem Entwickler mithilfe der grafischen Umgebung eine bequeme Art die Möglichkeiten des Debuggers zu nutzen. Diese sind u. a.:

  • Durchlaufen des Programms im Einzelschrittmodus (Step Over, Step Into)
  • Durchlaufen des Programms bis zu einem vorher festgelegten Haltepunkt (Breakpoint)
  • Beobachten (und Modifikation) der Variableninhalte
  • Unterbrechen des Programmablaufs
    (Besonders interessant bei Endlosschleifen)

Erstellen des Projekts für den Debugger

Ein C-Projekt unter Eclipse kennt standardmäßig zwei Konfigurationen.

  • Debug
Diese Konfiguration wird für den Entwicklungsprozess verwendet und führt Debuginformationen (z. B. Variablennamen) in die Ausgabedateien (Objektdateien, Bibliotheken, ausführbare Dateien) des Erstellprozesses mit.
Diese sind für den Debugger notwendig um das Programm auf Quellcodeebene durchlaufen und geeignet darstellen zu können.
  • Release
Diese Konfiguration aktiviert den Optimierungsmodus beim Erstellen der ausführbaren Datei.
Im resultierenden Programm befinden sich keine Debuginformationen und oft werden auch einige Laufzeitoptimierungen beim Erstellen durchgeführt.
Das daraus resultierende Programm wird als "Release"-Version (Version zur Veröffentlichung) bezeichnet.

Für die weitere Betrachtung des Debuggers wird also angenommen, dass das Projekt in der Debugkonfiguration erstellt wurde.
Beim Anlegen des Projekts ist die Debug-Konfiguration als Standardkonfiguration voreingestellt.
debug-build.png

Starten des Programms im Debugger

Zum Starten des aktuelle Projekt im Debugger wählen Sie zuerst

  • das Projekt im Projekt-Explorer aus (kann entfallen, wenn nur ein Projekt im Arbeitsbereich bearbeitet wird)
    und klicken auf die Wanze in der Werkzeugleiste
    > debug-start1.png


(alternativ dazu können Sie auch im Menü Run -> Debug wählen)
debug-start2.png



Sie werden als nächstes gefragt, ob Sie dem Perspektivenwechsel in die Debug-Perspektive zustimmen.
Bestätigen Sie die Dialogbox mit Yes.

Debug-Perspektive

Folgende Fensteraufbau finden Sie in der Debug-Perspektive:
debug-perspective.png


  • Instanzenbetrachter
Hier wird angezeigt wie viele Instanzen des Entwicklungsprojekt (mit und ohne Debugger) gestartet wurden und in welchem Zusatnd diese augenblicklich sind.
ACHTUNG: Solange eine Instanz des Projekts noch läuft wird ein neues Erstellen (Rebuild) nicht mehr korrekt abgeschlossen, da die ausführbare Datei (EXE-Datei bzw. Linux-Binary) nicht überschrieben werden darf, solange sie noch läuft.


  • Variablenbetrachter
Er zeigt den aktuellen Inhalt der lokalen Variablen an.


  • Quellcodebetrachter
Dieser Teil zeigt an, wo das Programm angehalten wurde (grüner Balken) und ermöglicht das Einsetzen und Entfernen von Haltepunkten.


  • Ausgabefenster
Hierin werden die Standardeingabe, -ausgabe und -fehlerausgabe des Projekts umgeleitet.
ACHTUNG: Bei der Umleitung handelt es sich um eine schwerwiegende Schwachstelle von Eclipse, denn sie arbeitet leider nicht richtig.
Die Ein- bzw. Ausgabe erfolgt nicht synchron zur Abarbeitung des entsprechenden Funktionsaufrufes (z. B. scanf(), printf(), putchar()).
Unter Windows ist eine Umleitung der Ein-/Ausgabe in ein echtes Konsolenfenster möglich.
Hier finden Sie eine Beschreibung zur Umleitung der Ein-/Ausgabe.


  • (Erweiterte) Werkzeugleiste
Die Werkzeugleiste wird in dieser Perspektive um wesentliche Debug-Befehle erweitert.
Sie können die Befehle auch über den Menüpunkt Run auswählen.
debug-toolbar.png
(1) Resume (Abkürzungstaste: F8)
Wiederaufnahme des Programmlaufs bis zum Ende oder bis zum Auftreten eines Haltepunktes.

(2) Terminate (Abkürzungstaste: Ctrl-F2)
Beenden der Debugsitzung für die aktuelle Instanz.

(3) Step Into (Abkürzungstaste: F5)
Führe die aktuelle Anweisung (grüner Balken) aus. Sollte die Anweisung einen Funktionsaufruf darstellen dann springe in die Funktion.

(4) Step Over (Abkürzungstaste: F6)
Führe die aktuelle Anweisung (grüner Balken) aus. Springe zur nächsten Anweisung des aktuell dargestellten Quellcodes.

Einfügen/Entfernen von Haltepunkten

Das Einfügen von Haltepunkten erfolgt entweder durch
Doppelklick links von der entsprechenden Quellcodezeile
debug-breakpoint1.png

oder durch Selektieren der Quellcodezeile und Drücken der Tastenkombination <Ctrl-Shift-B>

Beenden der Debug-Sitzung

Zum Beenden der Debug-Sitzung beenden Sie zuerst alle noch laufenden (bzw. angehaltenen) Instanzen (1) und schalten zurück in die C/C++-Entwicklungsperspektive (2).
debug-end-session.png