Home » Über Delphi » Entwicklungsumgebung bis Delphi 7

Entwicklungsumgebung bis Delphi 7

Überwachte Ausdrücke

Nachdem wir dank des Aufruf-Stacks nun wissen, wo wir uns befinden, können wir uns an das Prüfen von Variablenwerten und Objekten machen. Interessant ist dies nicht nur bei komplexen Berechnungen, bei denen ein falsches Ergebnis herauskommt, sondern auch bei if-Bedingungen, die unerwartet arbeiten.
Zunächst setzen wir einen Quelltexthaltepunkt auf die Zeile, in der die if-Bedingung steht und starten das Programm aus Delphi heraus (F9). Kurz vor Ausführung der if-Bedingung hält der Debugger das Programm an und wechselt in die Quelltextansicht. Mit der Maus können wir nun über die Variablennamen fahren und bekommen einen Hint mit ihren Werten angezeigt:

Delphi 7 Überwachte Ausdrücke

Am Fall der obigen Abbildung lässt sich leicht erkennen, weshalb die Bedingung bei diesem Durchlauf nicht zutrifft.
Soll nicht nur ein einzelner Wert überwacht werden, sondern mehrere Werte gleichzeitig, empfiehlt sich das Fenster der überwachten Ausdrücke. Es ist im Menü Ansicht/Debug-Fenster/Überwachte Ausdrücke zu finden (Strg+Alt+W). Über Rechtsklick/Ausdruck hinzufügen lassen sich weitere Ausdrücke zur Überwachung aufnehmen. Ganz einfach funktioniert das auch, wenn man im Code-Editor den Cursor auf den aufzunehmenden Ausdruck setzt und Strg+F5 drückt (Menü Start/Ausdruck hinzufügen).

Zu beachten ist beim Überwachen, dass sich die angezeigten Werte immer auf die aktuelle Programmausführungsposition (gekennzeichnet durch einen kleinen grünen Pfeil im Code-Editor) beziehen. Selbst wenn in einem längeren Code-Stück die Variable x mehrfach vorkommt und man über das Vorkommen von x einige Zeilen weiter vorne fährt, erhält man nicht den Wert, den die Variable an diese Stelle hatte, sondern den, den sie im Moment hat. Deshalb ist es auch egal, über welches Vorkommen von x man den Mauszeiger fährt, da alle denselben Wert anzeigen.

Bei Änderung anhalten

Manchmal fragt man sich, weshalb eine Variable an einer bestimmten Stelle einen anderen Wert hat als eigentlich erwartet. Irgendwo muss sich der Wert geändert haben – doch wo? Dem kann man mit Hilfe des Debuggers auf die Spur kommen: Gleich zu Beginn des Programms hält man die Ausführung an und nimmt die Variable in die Liste der überwachten Ausdrücke auf. Nun klickt man mit der rechten Maustaste auf den Eintrag in der Liste und wählt „Bei Änderung anhalten“. Dadurch wird ein Datenhaltepunkt für den gewählten überwachten Ausdruck gesetzt. Dieser gilt nur für die aktuelle Debugger-Sitzung. Beendet man das Programm und startet es neu, muss diese Einstellung erneut vorgenommen werden.

Auswerten/Ändern

Das Fenster „Auswerten/Ändern“, das über das Menü „Start“ (Strg+F7) zu erreichen ist, hilft dabei einzelne Ausdrücke zu prüfen. Den Ausdruck (z.B. einen Variablenwert) gibt man in die obere Zeile ein und klickt anschließend auf den Button „Auswerten“. Im Memofeld in der Mitte des Fensters erscheint daraufhin der aktuelle Wert des Ausdrucks. Über Klick auf „Überwachen“ lässt sich der Ausdruck auch in die Liste der überwachten Ausdrücke übernehmen.
Nun kann diesem Ausdruck während der Debugger-Sitzung ein neuer Wert zugewiesen werden. Diesen gibt man in das Eingabefeld ganz unten ein und klickt anschließend auf „Ändern“. So lassen sich Situationen durchspielen wie: Wie würde sich der Algorithmus verhalten, wenn der Wert einer Variablen anders wäre?

Delphi 7 Überwachte Ausdrücke

Durch Klick auf „Untersuchen“ wird der im Folgenden beschriebene Debug-Inspektor angezeigt.

Debug-Inspektor

Der Debug-Inspektor ähnelt vom Aussehen her dem Objektinspektor. Man kann ihn auf verschiedene Arten aufrufen: Wie oben erwähnt durch Klick auf „Untersuchen“ im „Auswerten/Ändern“-Fenster; durch Rechtsklick/Untersuchen in der Liste überwachter Ausdrücke oder durch über das Menü Start/Untersuchen.

Delphi 7 Überwachte AusdrückeDelphi 7 Überwachte Ausdrücke

Je nach dem, um was für einen Datentyp es sich handelt, ändert sich das Erscheinungsbild des Debug-Inspektors. Oben zu sehen ist die Auswertung eines einfachen Strings. Darunter die Auswertung des Objekts Form1. Hier erscheinen gleich drei Registerseiten, wobei die erste Daten mit Speicheradressen, die zweite Klassenmethoden mit ihren aktuellen Speicheradressen und die dritte Eigenschaften und ihre Werte anzeigt. Erscheint beim Anklicken eines Kästchens der rechten Spalte ein Button mit drei Punkten, so lässt sich dieser Wert zur Debugzeit ändern.