Verwenden des Debuggers

PureBasic bietet einen leistungsstarken Debugger, welcher Ihnen beim Finden von Fehlern und Bugs in Ihrem Quellcode hilft. Er ermöglicht Ihnen die Kontrolle der Programmausführung, Überwachen Ihrer Variablen, Arrays bzw. LinkedLists oder das Darstellen der Debug-Ausgabe Ihres Programms. Er bietet auch fortgeschrittene Funktionen für Assembler-Programmierer zum Untersuchen und Verändern von CPU-Registern sowie Anzeigen des Programmstacks oder des Speichers Ihres Programms. Er bietet auch die Möglichkeit, mittels des integrierten CPU-Monitors die CPU- und Speicherauslastung Ihres Programms zu überwachen.

Um den Debugger für Ihr Programm zu aktivieren, können Sie "Debugger verwenden" aus dem Debugger-Menü verwenden oder diese Einstellungen in den Compiler-Optionen Ihres Programms vornehmen. Durch Verwendung von "Mit Debugger kompilieren" aus dem Compiler-Menü können Sie den Debugger nur für diese eine Kompilierung aktivieren.

Sie können direkt in Ihrem Quellcode auch Debugger-Befehle wie CallDebugger, Debug, DebugLevel, DisableDebugger und EnableDebugger verwenden.

Der PureBasic Debugger ist in drei verschiedenen Formen verfügbar:

Ein Debugger direkt in die IDE integriert, um auf einfache und schnelle Art und Weise Ihre Programme direkt aus der Programmierumgebung heraus zu debuggen. Dieser Debugger bietet auch die meisten Funktionen.

Ein separater, eigenständiger Debugger, welcher nützlich für einige spezielle Anwendungszwecke (zum Beispiel, wenn das gleiche Programm mehrfach zur gleichen Zeit ausgeführt und debuggt werden muss) oder die Verwendung mit Code-Editoren von Drittanbietern ist. Er bietet die meisten Funktionen des integrierten IDE-Debuggers - da er jedoch unabhängig von der IDE ist, geht einiges der Effizienz des direkten Zugriffs aus der IDE verloren.
Der eigenständige Debugger ist derzeit nicht für MacOS verfügbar.

Ein Debugger nur für die Konsole. Die Hauptanwendung dieses Debugger liegt im Testen auf nicht-grafischen Umgebungen wie Linux-Systemen ohne X-Server oder für das Entwickeln "aus der Ferne" mittels ssh.

Der Typ des zu verwendenden Debuggers kann in den Einstellungen festgelegt werden.

Alle diese Funktionalität des Debuggens hat ihren Preis. Der Programmablauf eines im Debug-Modus gestarteten Programms ist deutlich langsamer als ohne Debugger. Diese sollte trotzdem kein Problem darstellen, da dies nur zum Testen genutzt wird.

Wenn Sie den Debugger verwenden wollen, jedoch einige Teile in Ihrem Programm haben, welche die volle Ausführungsgeschwindigkeit benötigen, können Sie durch Verwendung der DisableDebugger / EnableDebugger Schlüsselwörter genau für diesen Programmteil den Debugger ausschalten.

Der in die IDE integrierte Debugger

Sie können während des Programmablaufs über das Debugger-Menü oder die zugehörigen Schalter der Werkzeugleiste bzw. Tastenkürzel auf alle Debugger-Features zugreifen. Auf die Haltepunkte, den Fehlerbericht und den CPU-Monitor kann immer zugegriffen werden.

Während Sie Ihr Programm debuggen, werden bis zum Programmende alle zum Programm gehörenden Quellcode-Dateien (auch Include-Dateien) auf 'nur Lesen' (Read-Only) gesetzt. Dies hilft sicherzustellen, dass der aktuell als ausgeführt markierte Code nicht ohne erneute Kompilierung verändert wurde.

Beachten Sie, dass ein Programm nur einmalig laufen kann, wenn Sie sich im IDE-Debugger-Modus befinden. Wenn Sie das Programm ein weiteres Mal ausführen, wird Ihnen die Option angeboten, dieses mit dem eigenständigen Debugger starten.

Tipp:
Das Debugger-Menü wird auch zum Systemmenü (das Menü, welches Sie beim Klicken auf das PB-Icon in der linken oberen Ecke des Fensters erhalten) des Hauptfensters der IDE hinzugefügt. Dies ermöglicht Ihnen auch den Zugriff auf das Debugger-Menü über die Startleiste (Taskbar), indem Sie mit der rechten Maustaste auf das Icon der IDE in der Startleiste klicken.

Programmkontrolle

Es gibt Funktionen für die grundlegende Kontrolle des laufenden Programms. Sie können die Ausführung anhalten, um Variablen oder die Code-Position zu untersuchen oder den Quellcode Zeile für Zeile auszuführen, um dem Programmablauf zu folgen. Während das Programm angehalten wird, wird die gerade ausgeführte Zeile in Ihrem Quellcode markiert (mit hellblauer Hintergrundfarbe in den Standard-Farben).

Der Status des Programms kann in der IDE-Statusleiste oder im Bereich des Fehlerberichts eingesehen werden.

Befehle im Debugger-Menü für den Programmablauf:

Stop
Hält das Programm an und zeigt die aktuelle Zeile an.

Fortsetzen
Setzt die Programmausführung fort, bis eine erneute Stop-Bedingung eintritt.

Programm beenden
Dies veranlasst das Beenden des Programms und schließt alle zugehörigen Debugger-Fenster.

Schritt
Dies führt eine Zeile an Quellcode aus und hält dann die Programmausführung wieder an.

Schritt <n>
Dies wird eine Anzahl an Schritten, welche Sie angeben können, ausführen und dann die Ausführung wieder anhalten.

Haltepunkte

Haltepunkte sind ein weiterer Weg, um die Ausführung Ihres Programms zu kontrollieren. Mit der Menü-Option "Haltepunkt" markieren Sie die aktuell ausgewählte Zeile als Haltepunkt (oder entfernen jeden Haltepunkt, der in dieser Zeile bereits existiert).

Wenn die Ausführung des Quellcodes diese Zeile erreicht, wird sie an diesem Punkt anhalten. Beachten Sie, dass wenn Sie eine nicht-ausführbare Zeile (wie eine Leerzeile oder eine Struktur-Definition) auswählen, die Programmausführung auf der nächsten ausführbaren Zeile danach angehalten wird.

Nachdem die Ausführung Ihres Programms am Haltepunkt gestoppt wurde, können Sie jeden Menü-Befehl zur Programmkontrolle verwenden, um die Ausführung fortzusetzen oder zu beenden.

Haltepunkte können dynamisch gesetzt und entfernt werden, während Ihr Programm läuft oder während Sie Ihren Quellcode bearbeiten. Mit dem Menü-Befehl "Haltepunkte löschen" können Sie alle Haltepunkte in einer Quellcode-Datei entfernen.

Hinweis: Sie können auch Haltepunkte setzen/entfernen, indem Sie die Alt-Taste gedrückt halten und auf den Rand, welcher die Haltepunkt-Markierungen enthält, klicken.

Fehler im Programm

Wenn der Debugger auf einen Fehler in Ihrem Programm stößt, wird er die Ausführung anhalten, die Zeile mit dem aufgetretenen Fehler markieren (roter Hintergrund in den Standardfarben) und die Fehlernachricht im Fehlerbericht und in der Statusleiste anzeigen.

Zu diesem Zeitpunkt können Sie immer noch die Variablen Ihres Programms untersuchen, genauso die Aufrufverfolgung oder den Speicher. Jedoch andere Features wie die Register-Anzeige oder Stackverfolgung sind nach einem Fehler nicht mehr verfügbar.

Wird der Fehler als schwerwiegend eingeschätzt (wie ein ungültiger Speicherzugriff oder Division durch 0), ist es Ihnen nicht erlaubt, die Ausführung ab diesem Punkt fortzusetzen. Wenn der Fehler von einer PureBasic Library gemeldet wurde, ist Ihnen ein Fortsetzen des Programmablaufs möglich. Dies kann jedoch zu weiteren Fehlern führen, da Fortsetzen des Programms in diesem Fall den angezeigten Fehler einfach ignoriert.

Nach einem Fehler (auch einem schwerwiegenden), müssen Sie den Menü-Befehl "Programm beenden" verwenden, um das Programm zu beenden und mit dem Editieren des Quellcodes fortzufahren. Der Grund, warum das Programm nicht automatisch beendet wird, liegt darin, dass Ihnen sonst die Verwendung der anderen Debugger-Features (wie Anzeigen von Variablen) zum Aufspüren des Fehlers nicht möglich wäre.

Hinweis: Sie können den Debugger so konfigurieren, dass das Programm automatisch bei jedem Fehler beendet wird. Siehe hierfür in Anpassen der IDE.

Der Fehlerbericht

Der Fehlerbericht (oder auch "Fehlerprotokoll") wird verwendet, um die Compiler-Fehler aufzuzeichnen, genauso wie die Nachrichten vom Debuggen. Nachrichten werden für die Datei aufgezeichnet, die sie betreffen. Wenn also ein Fehler in einer Include-Datei auftritt, dann wird diese Datei angezeigt und der Fehler für diese aufgezeichnet.

Das "Fehlerbericht" Untermenü des Debugger-Menüs bietet Funktionen hierfür:

Fehlerbericht anzeigen
Zeigt / versteckt den Bericht für den aktuellen Quellcode.

Bericht löschen
Löscht den Bericht für diese Datei.

Bericht kopieren
Kopiert den Inhalt des Fehlerberichts in die Zwischenablage.

Fehlermarkierungen löschen
Nachdem Sie das Programm beendet haben, bleiben alle Fehlermarkierungen im Quellcode trotzdem erhalten. Dies soll Ihnen helfen, die den Fehler verursachende Zeile zu finden und diesen zu beheben. Der "Fehlermarkierungen löschen" Menü-Befehl kann verwendet werden, um diese Markierungen zu entfernen.

Sie können die IDE auch so konfigurieren, dass die Fehlermarkierungen am Programmende automatisch gelöscht werden. Siehe hierfür in Anpassen der IDE.

Der eigenständige Debugger

Der eigenständige (auch "standalone") Debugger ist dem der IDE sehr ähnlich und wird daher hier nur kurz beschrieben:

Auf dem Debugger-Fenster haben Sie Kontrollschalter, um damit die grundlegende Programmkontrolle auszuüben, so wie oben beschrieben. Der "Schritt"-Schalter führt so viele Schritte aus, wie in dem daneben liegenden Eingabefeld angegeben sind. Das Schließen des Debuggers mit "Beenden" oder dem Schließknopf am Fenster wird auch das debuggte Programm beenden.

Der Bereich des Fehlerberichts kann versteckt werden, indem Sie auf den Pfeil auf der rechten Seite klicken um das Debuggerfenster kleiner zu machen.

Die Code-Anzeige wird verwendet, um die aktuell ausgeführte Code-Zeile genauso wie alle Fehler oder Haltepunkte anzuzeigen. Verwenden Sie das oberhalb befindliche Aufklappmenü, um die gewünschte Include-Datei anzuzeigen. Die Schalter "Haltepunkt setzen", "Haltepunkt entfernen" und "Haltepunkte löschen" können verwendet werden, um die Haltepunkte in der aktuell angezeigte Quellcode-Datei zu verwalten.

Auf die Debugger-Werkzeuge kann mittels der Schalter unterhalb der Codeanzeige zugegriffen werden. Ihre Benutzung ist die gleiche wie beim integrierten Debugger. Der CPU-Monitor ist beim eigenständigen Debugger nicht verfügbar.

Hinweis: Der eigenständige Debugger hat keine eigenen Einstellmöglichkeiten. Er verwendet die Debugger- und Farbeinstellungen der IDE. Wenn Sie also einen Editors eines Drittanbieters und den eigenständigen Debugger verwenden, sollten Sie wenigstens einmal die IDE starten, um die Debugger-Einstellungen vorzunehmen.

Ausführen des eigenständigen Debuggers von der Kommandozeile:

Um ein über die Kommandozeile kompiliertes Programm mit eingeschaltetem Debugger (-d oder /Debugger Option) auszuführen, rufen Sie den Debugger wie folgt auf:

pbdebugger <Executable-Datei> <Executable-Kommandozeile>

Wenn Sie ein Executable mit aktiviertem Debugger direkt von der Kommandozeile ausführen, wird nur der Kommandozeilen-Debugger verwendet.

Der Kommandozeilen-Debugger:

Der Kommandozeilen-Debugger ist kein Bestandteil der IDE und daher nicht im Detail hier erklärt.

Während das Programm läuft, drücken Sie Strg+C in der Konsole, um eine Konsolen-Eingabeaufforderung für den Debugger zu öffnen. Dort geben Sie "help" ein, um einen Überblick über alle verfügbaren Befehle zu erhalten. Geben Sie "help <Befehlsname>" ein, um eine detailliertere Beschreibung eines Befehls zu erhalten.