Traceur de débogage

Ce menu permet d'inspecter l'état des variables au moment où votre code s'exécute. C'est très utile pour réparer un script qui ne fonctionne plus, ou simplement pendant la phase de débogage.

image.png

Pour utiliser la fonctionnalité de débogage, vous devez placer une instruction de débogage dans votre code, avec la syntaxe suivante : debug(parameter : text). Lorsque le code s'exécute et que l'instruction debug est atteinte, une entrée est créée dans la vue Traceur de débogage : le contenu du paramètre en sert de titre, et en dessous figure la structure de toutes les variables disponibles à cet instant, avec leurs valeurs courantes.

Remarque : vous pouvez ajouter à votre chaîne de texte n'importe quelle variable qui vous intéresse pour en voir la valeur immédiatement dans la fenêtre Traceur de débogage — en veillant toutefois à ce que le type soit du texte ! (par exemple debug("Debug point 1 : " + Variable1); )

Si l'on regarde de près la fenêtre de débogage, on voit qu'à chaque exécution de l'instruction debug une nouvelle ligne est créée.

Cette ligne contient le nom du point de débogage, c'est-à-dire le texte passé en paramètre à la fonction debug, par exemple : debug("my debug point").

Au début de la ligne figure aussi le temps écoulé depuis la ligne de débogage précédente. Cela aide à évaluer les performances du code (voir ci-dessus). La première ligne porte toujours la valeur « start ».

Cette ligne de débogage contient elle-même autant de lignes de variables qu'il y a de variables déclarées dans le script avant l'instruction debug. Chaque ligne de variable indique le nom, le type, la valeur et un extrait du code où la variable est déclarée.

debug.svg

Utilisation dans les boucles

En plaçant un debug à l'intérieur d'une boucle, vous voyez l'état des variables à chaque itération. Vous voyez aussi le temps passé sur chaque itération. Dans l'exemple ci-dessous, le délai est inférieur ou égal à 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;

Enregistrement de l’écran 2024-12-29 à 12.32.33.gif

Mais si l'on ajoute une instruction coûteuse en temps d'exécution, comme l'instruction « select », on constate que le temps entre chaque itération augmente nettement.

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

En plaçant une instruction debug avant et après un bloc de script, vous pouvez mesurer le temps d'exécution total de ce 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