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, leDEBUGest ignoré (deuxième exemple). - Effet
- À chaque
DEBUG, le fichier imprimante reçoit deux lignes :DEBUG =suivi du numéro de ligne duDEBUGdans le listing, de l'étiquette et de la liste des indicateurs allumés, puisFIELD 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.