Rexx - Débogage

Le débogage est une fonctionnalité importante dans tout langage de programmation. Il aide le développeur à diagnostiquer les erreurs, à trouver la cause première et à les résoudre en conséquence. Dans Rexx, l'utilitaire de trace est utilisé pour le débogage. L'instruction de trace peut être implémentée de 2 manières, l'une est le mode batch et l'autre est le mode interactif. Voyons comment implémenter les deux options.

Trace en mode batch

La commande trace est utilisée pour donner un niveau détaillé de chaque commande Rexx qui est exécutée.

La syntaxe générale de l'instruction trace est indiquée comme suit -

Syntaxe

trace [setting]

Où le paramètre peut être l'une des options suivantes -

  • A - Trace toutes les commandes.

  • C - Trace uniquement les commandes de l'hôte qui sont envoyées au système d'exploitation.

  • E - Trace uniquement les commandes de l'hôte qui sont envoyées au système d'exploitation qui ont entraîné une erreur.

  • F - Trace uniquement les commandes de l'hôte qui sont envoyées au système d'exploitation qui ont entraîné une panne.

  • I - Ceci fournit un traçage de niveau intermédiaire des commandes Rexx.

  • L - Cette option est si vous souhaitez étiqueter le traçage au fur et à mesure.

  • N - Il s'agit de l'option par défaut dans laquelle aucun traçage n'a lieu.

Jetons un coup d'œil à un exemple de la commande trace.

Exemple

/* Main program */ 
trace A 

/* Main program */ 
n = 100.45 if datatype( n, wholenumber ) then signal msg 

say 'This is a whole number' 
return 0 

msg : 
   say ' This is an incorrect number '

La sortie du programme ci-dessus sera la suivante -

5 *-* n = 100.45 if datatype( n, wholenumber ) then signal msg
   7 *-* say 'This is a whole number
This is a whole number                                                   
   8 *-* return 0

À partir de la sortie, vous pouvez voir qu'une trace supplémentaire a été ajoutée à la sortie du programme. Les choses suivantes peuvent être notées à propos de la sortie -

  • Le numéro de ligne ainsi que l'instruction exécutée sont ajoutés à la sortie de trace.

  • Chaque ligne exécutée est affichée dans la sortie de trace.

Fonction de trace

La trace peut également être activée à l'aide de la fonction de trace. La syntaxe générale et l'exemple sont présentés ci-dessous.

Syntaxe

trace()

La fonction ci-dessus renvoie le niveau de trace actuel.

Paramètres

Aucun

Valeur de retour

La fonction ci-dessus donne le niveau de trace actuel.

Exemple

/* Main program */ 
say trace() 

/* Main program */ 
n = 100.45 if datatype( n, wholenumber ) then signal msg 

say 'This is a whole number' 
return 0 
msg : 

say 'This is an incorrect number '

La sortie du programme ci-dessus sera la suivante.

N 
This is an incorrect number

La première ligne de N indique que la trace est définie sur Normal.

Définition de la valeur de trace

Le niveau de trace peut être défini avec la fonction de trace. La syntaxe générale et l'exemple sont présentés ci-dessous.

Syntaxe

trace(travel_level)

Paramètres

  • trace_level - Ceci est similaire aux options disponibles pour définir le niveau de trace.

Valeur de retour

La fonction ci-dessus donne le niveau de trace actuel.

Exemple

/* Main program */ 
say trace() 
current_trace = trace('A') 
say current_trace 

/* Main program */ 
n = 100.45 if datatype( n, wholenumber ) then 
signal msg say 'This is a whole number' 
return 0 
msg : 
say ' This is an incorrect number '

La sortie du programme ci-dessus sera la suivante -

N 
   4 *-* say current_trace 
N 
   6 *-* n = 100.45 
   7 *-* if \ datatype( n, wholenumber ) then 
   8 *-* signal msg 
   12 *-* say 'This is an incorrect number' 
'This is an incorrect number'

Traçage interactif

Le traçage interactif est dans lequel, le traçage est effectué pendant l'exécution du programme. Tout comme dans un IDE tel que Visual Studio pour .Net, dans lequel vous pouvez ajouter des points d'arrêt et voir comment chaque instruction s'exécute, vous pouvez également voir le programme au fur et à mesure que chaque ligne de code s'exécute.

La syntaxe générale est la suivante -

Syntaxe

trace ?options

Où, les options sont les mêmes pour la commande trace comme indiqué ci-dessous.

  • A - Trace toutes les commandes

  • C - Trace uniquement les commandes de l'hôte qui sont envoyées au système d'exploitation.

  • E - Trace uniquement les commandes de l'hôte qui sont envoyées au système d'exploitation qui ont entraîné une erreur.

  • F - Trace uniquement les commandes de l'hôte qui sont envoyées au système d'exploitation qui ont entraîné une panne.

  • I - Ceci fournit un traçage de niveau intermédiaire des commandes Rexx.

  • L - Cette option est si vous souhaitez étiqueter le traçage au fur et à mesure.

  • N - Il s'agit de l'option par défaut dans laquelle aucun traçage n'a lieu.

Jetons un coup d'œil à un exemple d'implémentation du traçage actif.

Exemple

/* Main program */ 
trace ?A

/* Main program */ 
n = 100.45 if datatype( n, wholenumber ) then 
signal msg 

say 'This is a whole number' 
return 0 
msg : say 'This is an incorrect number'

La sortie du programme ci-dessus sera comme indiqué dans le programme suivant. La trace s'arrêtera à chaque ligne de code; puis vous devez appuyer sur le bouton Entrée pour passer à la ligne de code suivante.

This is an incorrect number
       +++ "LINUX COMMAND /home/cg/root/5798511/main.rex"
     5 *-* n = 100.45 if datatype( n, wholenumber ) then 
+++ Interactive trace. "Trace Off" to end debug, ENTER to Continue. +++
     6 *-* signal msg 
    10 *-* msg :
    10 *-* say 'This is an incorrect number'