Tracciatore debug

Questo menu permette di ispezionare lo stato delle variabili al momento dell'esecuzione del codice. È molto utile per riparare uno script che non funziona più, o semplicemente durante la fase di debug.

image.png

Per usare la funzione di debug occorre inserire un'istruzione di debug nel codice, con la sintassi seguente: debug(parameter : text); quando il codice viene elaborato e l'istruzione di debug viene raggiunta, nella vista Tracciatore debug compare una voce con il contenuto del parametro come titolo e, al di sotto, una struttura di tutte le variabili disponibili in quel momento con i loro valori correnti.

Nota: potete aggiungere alla stringa di testo qualsiasi variabile di particolare interesse per vederne subito il valore nella finestra Tracciatore debug, avendo cura che il tipo sia testo! (per esempio debug("Debug point 1 : " + Variable1); )

Guardando da vicino la finestra di debug, si nota che a ogni esecuzione dell'istruzione di debug viene creata una nuova riga.

Questa riga contiene il nome del punto di debug, cioè il testo passato come parametro alla funzione debug, per esempio: debug("my debug point").

All'inizio della riga è indicato anche il tempo trascorso dalla riga di debug precedente. Ciò aiuta a valutare le prestazioni del codice (vedere sopra). La prima riga ha sempre il valore «start».

Questa riga di debug contiene a sua volta tante righe di variabile quante sono le variabili dichiarate nello script prima dell'istruzione di debug. Ogni riga di variabile riporta il nome, il tipo, il valore e un estratto del codice in cui la variabile è dichiarata.

debug.svg

Uso nei cicli

Inserendo un debug all'interno di un ciclo si può osservare lo stato delle variabili a ogni iterazione. Si vede anche il tempo impiegato da ciascuna iterazione. Nell'esempio qui sotto il ritardo è inferiore o uguale a 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;

Registrazione dello schermo 2024-12-29 alle 12.32.33.gif

Ma se aggiungiamo un'istruzione costosa in termini di tempo di esecuzione, come l'istruzione «select», si vede che il tempo tra un'iterazione e l'altra aumenta sensibilmente.

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;

image.png

Inserendo un'istruzione di debug prima e dopo un blocco di script, potete misurare il tempo totale di esecuzione dello script :

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;

image.png