Aller au contenu

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

DUMP

Imprimer l'état du programme

Écrit dans un spoule QPPGMDMP l'état du programme et la valeur de toutes ses zones ; la spécification de contrôle doit avoir un 1 en colonne 15.

Syntaxe

     C           ident     DUMP
     C                     DUMP
     H        1
Facteur 1 (18-27)
Facultatif : une étiquette de 8 caractères, imprimée en titre du bloc.
Indicateurs de conditionnement (9-17)
Facultatifs : on conditionne souvent le DUMP par un indicateur d'erreur.
Spécification H, colonne 15
Doit contenir 1. Sans lui, le DUMP est ignoré (deuxième exemple).
Effet
Un fichier spoule QPPGMDMP est créé : état du programme (nom, instruction en erreur, nombre de paramètres, dates), puis un tableau NAME OFFSET ATTRIBUTES VALUE avec chaque zone du programme, son adresse, son type et sa valeur. Le programme continue ensuite normalement.

À quoi ça sert

Quand un programme donne un résultat faux et qu'on n'a pas de débogueur, DUMP donne toutes les valeurs au même instant. On le place avant l'opération douteuse, on regarde le spoule, puis on le retire.

Exemple 1 : Un instantané

     H*  DUMP : instantane des zones du programme dans un spoule
     H        1
     C                     Z-ADD1250      SOLDE   72
     C                     MOVEL'DUPONT'  NOM    10
     C           'POINT1'  DUMP
     C           'Apres'   DSPLY
     C                     SETON                     LR

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

Apres

Extrait du cliché (spoule QPPGMDMP)

 POINT1
 NAME     OFFSET  ATTRIBUTES    VALUE
 NOM      00ABFA  CHAR(10)      'DUPONT    '
 SOLDE    00ABF6  PACKED(7,2)   1250.

La spécification H porte un 1 en colonne 15. Le DUMP étiqueté POINT1 crée le spoule dont l'extrait suit : on y lit NOM (zone de 10 caractères) et SOLDE (décimal condensé, 7 chiffres dont 2 décimales, valeur 1250). Le spoule complet contient aussi le nom du travail, de l'utilisateur et les zones internes du programme : seule la partie utile est conservée ici.

Exemple 2 : Sans le 1 en colonne 15

     H*  DUMP : sans le 1 en colonne 15, DUMP est ignore
     H
     C                     Z-ADD1250      SOLDE   72
     C                     MOVEL'DUPONT'  NOM    10
     C           'POINT1'  DUMP
     C           'Apres'   DSPLY
     C                     SETON                     LR

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

Apres

La spécification H est vide. Le compilateur accepte le programme (avertissement QRG5152, gravité 00) mais le DUMP ne produit rien : aucun spoule, seul Apres est affiché.

Le piège

Sans le 1 en colonne 15 de la spécification H, DUMP ne fait rien et ne le dit pas. Seul un message sans conséquence signale le défaut à la compilation : QRG5152 (gravité 00), « Une opération DEBUG ou DUMP est utilisée mais non définie dans la spécification de contrôle. » Le programme s'exécute sans erreur, mais le spoule n'existe pas.

Le spoule contient des données. Il reproduit les zones du programme telles quelles, donc des numéros de client, des soldes. Supprimez-le après lecture.

En RPG ILE full free

L'opération DUMP existe toujours en RPG IV. Pour regarder des valeurs, on préfère aujourd'hui le débogueur du système (STRDBG), qui les montre une à une sans modifier le programme.