Vous pouvez utiliser l'instruction TRACE pour montrer comment le processeur du langage évalue chaque opération d'une expression au fur et à mesure qu'il la lit, ou pour montrer le résultat final d'une expression. Ces deux types de traçage sont utiles pour le débogage des programmes.
Traçage des opérations
Pour suivre les opérations au sein d'une expression, utilisez la forme TRACE I (TRACE Intermédiaires) de l'instruction TRACE. Le processeur de langue décompose toutes les expressions qui suivent l'instruction et les analyse comme suit :
>V> Valeur de la variable.
Les données tracées sont le contenu d'une variable.
>L> Valeur littérale
Les données tracées sont des données littérales (chaînes de caractères, variables non initialisées ou constantes).
>O> Résultat de l'opération
Les données tracées sont le résultat d'une opération sur deux termes.
L'exemple suivant utilise l'instruction TRACE I. (Les numéros de ligne ne font pas partie du programme. Ils facilitent la discussion de l'exemple qui suit)Figure 1 : TRACE montre comment REXX évalue une expression
1 /************************* REXX ***************************/
2 /* This program uses the TRACE instruction to show how */
3 /* an expression is evaluated, operation by operation. */
4 /**********************************************************/
5 a = 9
6 y = 2
7 TRACE I
8
9 IF a + 1 > 5 * y THEN
10 SAY 'a is big enough.'
11 ELSE NOP /* No operation on the ELSE path */
Lorsque vous exécutez l'exemple, l'instruction SAY produit :
9 *-* IF a + 1 > 5 * y
>V> "9"
>L> "1"
>O> "10"
>L> "5"
>V> "2"
>O> "10"
>O> "0"
Le site 9 est le numéro de la ligne. L'adresse *-* indique que les données qui suivent sont celles du programme IF a + 1 < 5 * y. Les lignes restantes décomposent toutes les expressions.
Traçage des résultats
Pour tracer uniquement le résultat final d'une expression, utilisez la forme TRACE R (TRACE Results) de l'instruction TRACE. Le processeur de langue analyse toutes les expressions qui suivent l'instruction comme suit :
>>> Final result of an expression
Si vous remplacez l'opérande de l'instruction TRACE de l'exemple précédent par un R au lieu d'un I, vous obtiendrez les résultats suivants.
9 *-* IF a + 1 > 5 * y
>>> "0"
Outre le traçage des opérations et des résultats, l'instruction TRACE propose d'autres types de traçage. Voir TRACE.
Exercices : utilisation de l'instruction TRACE
Écrire un programme avec une expression complexe, telle que :
IF (a > z) | (c < 2 * d) THEN ....
Définissez a, z, c et d dans le programme et utilisez l'instruction TRACE I.
RéponseFigure 2. Solution possible
/****************************** REXX ********************************/
/* This program uses the TRACE nstruction to show how the language */
* processor evaluates an expression, operation by operation. */
/********************************************************************/
a = 1
z = 2
c = 3
d = 4
TRACE I
IF (a > z) | (c < 2 * d) THEN
SAY 'At least one expression was true.'
ELSE
SAY 'Neither expression was true.'
Lorsque vous exécutez ce programme, il produit :
12 *-* IF (a > z) | (c < 2 * d)
>V> "1"
>V> "2"
>O> "0"
>V> "3"
>L> "2"
>V> "4"
>O> "8"
>O> "1"
>O> "1"
*-* THEN
13 *-* SAY 'At least one expression was true.'
>L> "At least one expression was true."
At least one expression was true.