Debug-Tracer

In diesem Menü können Sie den Zustand der Variablen zum Zeitpunkt der Ausführung Ihres Codes untersuchen. Das ist sehr nützlich, um ein nicht mehr funktionierendes Skript zu reparieren oder ganz allgemein während der Fehlersuche.

Bild.png

Um die Debug-Funktion zu nutzen, setzen Sie in Ihren Code eine Debug-Anweisung mit folgender Syntax: debug(parameter : text); Wird der Code abgearbeitet und die Debug-Anweisung erreicht, so entsteht in der Ansicht Debug-Tracer ein Eintrag: mit dem Inhalt des Parameters als Titel und darunter einer Aufstellung aller zu diesem Zeitpunkt verfügbaren Variablen samt ihren aktuellen Werten.

Hinweis: Sie können jede besonders interessante Variable in Ihre Textzeichenfolge einfügen, um ihren Wert sofort im Fenster des Debug-Tracers zu sehen – achten Sie aber darauf, dass der Typ Text ist! (z. B. debug("Debug point 1 : " + Variable1); )

Sieht man sich das Debug-Fenster genauer an, so erkennt man, dass bei jeder Ausführung der Debug-Anweisung eine neue Zeile entsteht.

Diese Zeile enthält den Namen des Debug-Punktes, also den Text, der der debug-Funktion als Parameter übergeben wurde, zum Beispiel: debug("my debug point").

Am Anfang der Zeile steht außerdem die seit der vorigen Debug-Zeile verstrichene Zeit. Damit lässt sich die Leistung des Codes einschätzen (siehe oben). Die erste Zeile trägt immer den Wert „start“.

Diese Debug-Zeile selbst enthält so viele Variablenzeilen, wie im Skript vor der Debug-Anweisung Variablen deklariert wurden. Jede Variablenzeile nennt Name, Typ, Wert und einen Ausschnitt des Codes, in dem die Variable deklariert wird.

debug.svg

Verwendung in Schleifen

Setzen Sie ein debug innerhalb einer Schleife, so sehen Sie den Zustand der Variablen bei jedem Schleifendurchlauf. Ebenso sehen Sie die für jeden Durchlauf benötigte Zeit. Im folgenden Beispiel beträgt die Verzögerung höchstens 1 ms.

let a := select Customer
let d := for i in a do
           debug("for each customer");
           i.'first name' + " " + i.'last name';
         end;
debug("all customers");
d;

Bildschirmaufnahme 2024-12-29 um 12.32.33.gif

Fügt man jedoch eine im Zeitaufwand teure Anweisung hinzu, etwa die Anweisung „select“, so steigt die Zeit zwischen den Durchläufen deutlich an.

let a := select Customer
let d := for i in a do
           let e := select Invoice where Customer = i;
           debug("for each customer");
           i.'first name' + " " + i.'last name' + " " + sum(e.TOTAL);
         end;
debug("all customers");
d;

Bild.png

Setzt man vor und nach einem Skriptblock eine Debug-Anweisung, so lässt sich die gesamte Ausführungszeit des Skripts messen:

debug("start of script");
let a := select Customer
let d := for i in a do
           i.'first name' + " " + i.'last name';
         end;
debug("end of script");
d;

Bild.png