Enthaltene Debugging-Werkzeuge
Diese Werkzeuge bieten viele Funktionen, um Ihr Programm zu untersuchen, während dies läuft. Sie können nicht verwendet werden, während Sie den Quellcode bearbeiten. Diese Werkzeuge (außer der CPU-Monitor) sind sowohl im integrierten als auch im eigenständigen Debugger verfügbar. Der Konsolen-Debugger bietet auch viele dieser Funktionen, jedoch über die Debugger-Konsole.Die Debugger-Ausgabe
In diesem Fenster wird die Ausgabe der Debug Anweisung angezeigt. Die Debug-Anweisung ist ein schneller und einfacher Weg, um Nachrichten für Debugging-Zwecke auszugeben.
Das Fenster mit der Debugger-Ausgabe wird automatisch geöffnet, sobald die erste Ausgabe durch Ihr Programm produziert wird. Wenn Sie es dann schließen, wird es bei nachfolgenden Nachrichten nicht automatisch geöffnet, diese werden jedoch trotzdem aufgezeichnet. Sie können diese Ausgabe in die Zwischenablage kopieren oder in eine Datei speichern. Es gibt auch einen Schalter, um die Nachrichten im Fenster zu löschen.
Die Beobachtungsliste
Die Beobachtungsliste kann verwendet werden, um die Veränderungen an Variablen in Ihrem Programm in Echtzeit zu verfolgen. Sie kann nur einzelne Variablen (keine ganzen Strukturen) darstellen, dennoch können diese Variablen Teil einer Struktur sein.
Um eine Variable hinzuzufügen, wählen Sie deren Prozedur (wenn es eine lokale Variable ist) oder wählen Sie "--- Haupt ---", wenn es sich um eine globale Variable oder Teil eines Arrays bzw. LinkedList handelt. Dann geben Sie den Variablennamen, (wie wenn Sie darauf in Ihrem Quellcode zurückgreifen würden) in das Variablenfeld ein und drücken "Hinzufügen".
Beispiele: MyVariable$ - eine normale String-Variable hinzufügen Array(1, 5) – ein Array-Feld hinzufügen Structure\subfield[5]\value – eine Variable innerhalb einer Struktur hinzufügen MyLinkedList()\structuresubfield – eine Variable innerhalb einer strukturierten LinkedList hinzufügenSie können auch neu zu beobachtende Variablen über die Variablenliste hinzufügen, indem Sie diese dort mit der rechten Maustaste anklicken und "Zur Beobachtungsliste hinzufügen" auswählen.
In der Liste werden Sie die Werte der überwachten Variablen sehen. Ist der Wert dargestellt als "---", bedeutet dies, dass diese Variable zum jetzigen Zeitpunkt im Quellcode nicht gültig ist. (Zum Beispiel wenn Sie eine lokale Variable beobachten oder ein Element einer LinkedList und die Liste kein aktuelles Element hat.)
Die beobachteten Variablen werden zwischen den Debugger-Sitzungen gespeichert und sogar mit den Compiler-Optionen gespeichert, weshalb Sie diese Liste nicht ständig neu füllen müssen.
Die Variablenliste
Die Variablenliste ermöglicht das Untersuchen von globalen und lokalen Variablen, Arrays und LinkedLists.
Im "Variablen"-Bereich können Sie sowohl globale Variablen als auch lokale Variablen der aktuellen Prozedur (sofern vorhanden) sehen. Klicken Sie auf "Aktualisierung", um die Liste an Variablen und deren Werte zu aktualisieren.
Im "Arrays"-Bereich haben Sie eine Liste aller Arrays in Ihrem Programm und die Dimensionen, mit welchen diese aktuell definiert sind (-1 bedeutet, dass Dim noch nicht aufgerufen wurde). Klicken Sie auf "Liste aktualisieren", um die Liste an Arrays und deren Dimensionen zu aktualisieren.
Nachdem Sie ein Array ausgewählt haben, können Sie den für jede Dimension (x, y, z) anzuzeigenden Bereich eingeben und dann "Anzeigen" zur Anzeige dieses Bereichs auswählen. Sie können auch den Schalter "Alle anzeigen" verwenden, um das vollständige Array zu sehen.
Im "Linked Lists"-Bereich erhalten Sie eine Liste aller "LinkedLists" (verknüpften Listen"), die Anzahl der aktuell beinhalteten Elemente ("-" zeigt an, dass NewList noch nicht aufgerufen wurde) und den Index des aktuellen Elements in der Liste ("-" zeigt an, dass es kein aktuelles Element gibt). Das Anklicken von "Liste aktualisieren" aktualisiert auch diese Übersichtsliste auf.
Nachdem Sie eine LinkedList ausgewählt haben, können Sie deren aktuelles Element durch Ändern des Felds "Aktuelles Element" und Anklicken von "Setzen" ändern. (Verwenden Sie -1, um kein aktuelles Element zu setzen.)
Unterhalb können Sie einen Bereich von anzuzeigenden Elementen einstellen und "Anzeigen" für deren Anzeige anklicken. Wie auch bei Arrays zeigt "Alle anzeigen" die vollständige Liste.
Durch Anklicken einer Variable oder eines Feldes in einem Array oder LinkedList mit der rechten Maustaste können Sie diese Variable kopieren oder zur Beobachtungsliste für die Echtzeitverfolgung deren Werts hinzufügen.
Die Aufrufverfolgung
Die Prozeduren-Aufrufverfolgung (auch "Callstack Viewer") zeigt, welche verschachtelten Prozeduraufrufe zur aktuellen Position im Code führten. Jeder Eintrag in der Liste stellt eine Prozedur dar, die gerade offen ist. Sie zeigt die Zeile und die Datei, von welcher sie aufgerufen wurde, ebenso die beim Aufruf der Prozedur verwendeten Argumente. Durch Anklicken des Variablen-Schalters bei jeder Prozedur können Sie einen Blick auf die Variablen dieser Instanz der Prozedur werfen.
Dies ermöglicht das einfache Nachverfolgen, von welchem Teil des Codes eine Prozedur aufgerufen wurde. Die Aufrufverfolgung wird nur beim Stoppen des Programms oder der schrittweisen Ausführung einzelner Zeilen automatisch aktualisiert. Während das Programm läuft, müssen Sie den Schalter "Aktualisierung" drücken, um die Anzeige für die aktuelle Code-Position zu aktualisieren.
Der Bereich "Statistiken" zeigt die Anzahl, wie oft jede Prozedur im Code aufgerufen wurde. Sie können die Zählung für alle Prozeduren durch Anklicken von "Alle zurücksetzen" zurücksetzen, oder für den aktuell markierten Eintrag mit dem Schalter "Zurücksetzen". Wie bei der Aufrufverfolgung wird die Anzeige nicht automatisch aktualisiert, solange das Programm nicht angehalten wird. Benutzen Sie den Schalter "Aktualisierung" dafür.
Die Speicheranzeige
Die Speicheranzeige lässt Sie einen Blick auf einen Speicherbereich in Ihrem Programm werfen. Geben Sie den Bereich (in dezimal), den Sie sehen möchten, in den "Bereich"-Feldern ein und klicken Sie auf "Anzeigen". Ist der Speicherbereich gültig für das Anzeigen, wird dieser in der Anzeige darunter dargestellt. Wenn Teile des Bereichs nicht gültig für das Anzeigen sind, erhalten Sie eine Fehlernachricht.
Die Art der Anzeige kann über das Aufklappmenü in der linken unteren Ecke geändert werden. Die folgenden Ansichtsarten sind verfügbar:
Hex-Ansicht
Der Speicher wird angezeigt wie in einem Hex-Anzeiger, zuerst die Speicherposition in Hex-Anzeige auf der linken Seite, gefolgt von den hexadezimalen Byte-Werten und schließlich deren String-Entsprechung in der rechten Spalte.
Byte/Word/Long/Float-Tabelle
Der Speicherbereich wird angezeigt als eine Tabelle des angegebenen Variablentyps. Ob diese Tabelle nur eine oder mehrere Spalten hat, kann in den Voreinstellungen angegeben werden. (Siehe Anpassung der IDE.)
Byte/Word/Long-Tabelle (vorzeichenlos)
Dies zeigt ebenfalls eine Tabelle dieser Typen an, aber interpretiert die Werte als vorzeichenlose ("unsigned") Variablen.
String-Ansicht
Dies stellt den Speicherbereich als einen String dar, mit allen "Nicht-String" Zeichen in [] dargestellt (zum Beispiel "[NULL]" für ein 0-Byte).
Sie können den angezeigten Speicherbereich auch aus dem Speicheranzeiger exportieren:
Kopieren (Text): Kopiert den angezeigten Bereich als Text in die Zwischenablage.
Speichern (Text): Speichert den angezeigten Bereich als Text in eine Datei.
Speichern (Raw): Speichert den Speicherbereich im Rohformat (als "raw binary") in eine Datei.
Der Assembler-Debugger
Der Asm-Debugger wird für fortgeschrittene Programmierer angeboten, um den Inhalt der CPU-Register zu untersuchen und zu verändern. Ebenfalls um den Programmstack für das Debuggen von InlineASM-Code zu untersuchen.
Die "Prozessor-Register" Anzeige ist nur verfügbar, während die Programmausführung angehalten ist. Durch Ändern irgendeines der Register-Werte und Anklicken von "Setzen" können Sie den Wert in diesem Register verändern.
Die "Stapelverfolgung" zeigt den Inhalt des Programmstapel ("Stack"), angegeben in Relation zum ESP-Register. Wenn die aktuelle Stapelposition sich nicht an einer 4 Byte Grenze ausrichtet, kann keine Information über den Inhalt des Stacks ausgegeben werden. In diesem Fall wird der Stack in einer Hexadezimal-Anzeige dargestellt.
Wenn der Stack-Zeiger richtig ausgerichtet ist, werden die Stackinhalte mit Kommentaren über die Bedeutung der enthaltenen Werte dargestellt. (Stellen dann die "pushed" Register und andere Werte bei einem PB Prozeduraufruf dar.)
Die Stack- oder Stapelverfolgung wird automatisch aktualisiert, wenn Sie die Programmausführung stoppen oder sich schrittweise durch das Programm bewegen, es sei denn Sie haben etwas anderes in den Voreinstellungen angegeben. Wenn Sie das automatische Aktualisieren ausschalten, wird ein Schalter "Aktualisieren" dargestellt, um dies manuell auszuführen.
Hinweis: Der Assembler-Debugger ist derzeit nicht auf MaxOSX verfügbar.
Der CPU-Monitor
Der CPU-Monitor stellt die CPU- und Speicherauslastung jedes debuggten und gerade laufenden Programms dar. Es zeigt auch die systemweite totale Auslastung und die verfügbaren freien Ressourcen an. Durch Abhaken bzw. Entfernen des Häkchens vor jedem Eintrag können Sie wählen, welche Einträge im darüberliegenden Diagramm dargestellt werden. Durch Doppelklick auf einen Eintrag können Sie die Farbe für seine Darstellung auswählen.
Sie können auch ein Aktualisierungsintervall angeben, innerhalb dessen die Liste und das Diagramm aktualisiert werden. Der angezeigte Prozentwert ist der Durchschnitt der Auslastung innerhalb des letzten Intervalls.
Sie können den CPU-Monitor auch so einstellen, dass dieser immer über allen anderen Fenstern sichtbar bleibt (nicht möglich auf der gtk1-Version der IDE auf Linux).
Beachten Sie, dass die Speicheranzeige für "Gesamtauslastung" und "Freie Ressourcen" den physischen Speicherverbrauch anzeigt, während der für jedes Programm angezeigte Speicherverbrauch den verwendeten virtuellen Speicher (einschließlich Auslagerungsdatei auf Disk) anzeigt.