Tracciatore debug
Questa scheda 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.

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 scheda 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.
Il pannello Ninext deve essere aperto: a pannello chiuso, i punti di debug raggiunti non vengono rilevati. La scheda Tracciatore debug, invece, non ha bisogno di essere in primo piano.
Per provare gli esempi di questa pagina, incollateli nella Console ed eseguiteli: il Tracciatore debug mostra subito i loro punti di debug. Il cestino, in alto a destra del Tracciatore, svuota l'elenco.
Nota: potete aggiungere alla stringa di testo qualsiasi variabile di particolare interesse per vederne subito il valore nella scheda Tracciatore debug, avendo cura che il tipo sia testo! (per esempio debug("Debug point 1 : " + Variable1); )
Guardando da vicino la scheda, 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 più avanti). La prima riga ha sempre il valore «start».
Questa riga di debug contiene a sua volta una riga per ogni variabile visibile in quel punto dello script: le variabili dichiarate prima dell'istruzione di debug, la variabile di un ciclo, e persino quella la cui dichiarazione è in corso, che vale allora «void». Ogni riga di variabile riporta il nome, il tipo, il valore e un estratto del codice in cui la variabile è dichiarata.

Espandere, copiare, aprire
I valori vengono mostrati come nella Console:
- un elenco, un record, un oggetto, un riferimento o un testo che contiene JSON si espande con un clic sulla sua freccia;
- al passaggio del mouse su una riga compare un pulsante che ne copia il valore; sulla riga del punto di debug, copia tutta la traccia;
- un valore sottolineato designa un record: un clic lo apre in Ninox.
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 resta per lo più sotto 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;
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;
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;
