Aller au contenu

Code opération RPG III / RPG/400 · IBM i (AS/400) · Sous-programmes et appels

DEBUG

Tracer une zone et les indicateurs

Écrit dans un fichier imprimante une ligne de mise au point (étiquette, indicateurs allumés, valeur d'une zone) ; la spécification de contrôle doit avoir un 1 en colonne 15.

Syntaxe

     C           ident     DEBUGfichier   zone
     H        1
Facteur 1 (18-27)
Facultatif : une étiquette de 8 caractères, imprimée pour reconnaître le point de trace.
Facteur 2 (33-42)
Le nom du fichier imprimante qui reçoit la trace, déclaré en spécification F (ici QSYSPRT, en sortie).
Zone résultat (43-48)
La zone dont la valeur est imprimée à la suite des indicateurs.
Spécification H, colonne 15
Doit contenir 1. Sans lui, le DEBUG est ignoré (deuxième exemple).
Effet
À chaque DEBUG, le fichier imprimante reçoit deux lignes : DEBUG = suivi du numéro de ligne du DEBUG dans le listing, de l'étiquette et de la liste des indicateurs allumés, puis FIELD VALUE = et la valeur de la zone. Le programme continue ensuite normalement.

À quoi ça sert

DEBUG est une trace légère, sans débogueur : on suit la valeur d'un montant et les indicateurs au fil du programme, sur plusieurs passages, en un seul spoule. Contrairement à DUMP, il ne montre qu'une zone, mais il montre l'évolution d'une instruction à l'autre.

Exemple 1 : Deux points de trace

     H*  DEBUG : trace d'une zone et des indicateurs allumes
     H        1
     FQSYSPRT O   F     132            PRINTER
     C                     Z-ADD1250      SOLDE   72
     C                     SETON                     10
     C                     SETON                     27
     C           'POINT1'  DEBUGQSYSPRT   SOLDE
     C                     Z-ADD1300      SOLDE
     C           'POINT2'  DEBUGQSYSPRT   SOLDE
     C           'Apres'   DSPLY
     C                     SETON                     LR

Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :

Apres

État imprimé (spoule QSYSPRT)

DEBUG = 700       POINT1    INDICATORS ON = 10 27
FIELD VALUE =  125000
DEBUG = 900       POINT2    INDICATORS ON = 10 27
FIELD VALUE =  130000

Les indicateurs 10 et 27 sont allumés avant la trace. Le premier DEBUG (ligne 7 du source, soit 700 au listing) imprime SOLDE à 1250,00 ; le second (ligne 9, soit 900) imprime 1300,00. Les indicateurs allumés sont listés à chaque fois. Le fichier QSYSPRT doit être déclaré en spécification F.

Exemple 2 : Sans le 1 en colonne 15

     H*  DEBUG : sans le 1 en colonne 15, DEBUG est ignore
     H
     FQSYSPRT O   F     132            PRINTER
     C                     Z-ADD1250      SOLDE   72
     C           'POINT1'  DEBUGQSYSPRT   SOLDE
     C           'Apres'   DSPLY
     C                     SETON                     LR

Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :

Apres

Avec une spécification H vide, le programme compile (avertissement QRG5152, gravité 00) mais aucune trace n'est écrite : seul Apres est affiché, il n'y a pas de spoule QSYSPRT.

Le piège

Sans le 1 en colonne 15, DEBUG est ignoré en silence. Seul l'avertissement QRG5152 (gravité 00), « Une opération DEBUG ou DUMP est utilisée mais non définie dans la spécification de contrôle. », le signale à la compilation, et la gravité 00 ne bloque rien. On cherche alors une trace qui n'existe pas.

Les valeurs sont brutes. Une zone décimale s'imprime sans virgule : 125000 pour 1250,00 (zone de 7 chiffres dont 2 décimales).

En RPG ILE full free

Il n'y a pas d'équivalent en RPG ILE. On utilise le débogueur (STRDBG, points d'arrêt et espions), ou dsply pour une trace rapide.