Debug d’un programme batch avec STRSRVJOB

Un job est planté, que faire ?

Lorsqu’un job est planté, il est possible bien souvent soit de l’arrêter (Cancel) ou de faire un dump (Dump).

Il existe pourtant un moyen de visualiser directement le source (exactement à  l’endroit ou le programme se plante), voir de corriger directement les valeurs erronées et de continuer le programme.

Pour cela vous devez tout d’abord récupérer le N°, le USER et le NOM du job planté ainsi que le programme en erreur (utiliser par exemple la commande WRKUSRJOB).

Une fois ces information récupérées vous pouvez lancer la maintenance de travail grace à  la commande suivante :


STRSRVJOB JOB(042565/SGS/DSPC0004) soit N°/USER/NOM.

Ensuite il vous suffit de lancer le debuggeur sur le programme récalcitrant avec la commande STRDBG PGM(ProgrammeQuiPlante).

Vous vous retrouvez devant le source du programme grace au debuggeur vous pouvez modifier la valeur de certaines variables et le cas échéant continuer l’exécution du programme.

Cela présente aussi l’avantage de ne pas chercher la ligne en erreur. Le debuggeur se positionne directement dessus.

Après le debuggage, il faut arrêter la maintenance du travail par la commande ENDSRVJOB.

Comment debugger un programme batch ?

  1. Suspendre la jobq par la commande HLDJOBQ NomJOBQ.
  2. Soumettre le programme en batch.
  3. Noter le N°, le USER et le NOM du job soumis (par la commande WRKUSRJOB par exemple)
  4. exécuter la commande STRSRVJOB JOB(N°/USER/NomJOB)
  5. exécuter la commande STRDBG NomProgramme puis F12 pour revenir en ligne de commande.
  6. Libérer la jobq par la commande RLSJOBQ NomJOBQ
  7. Lorsque le programme démarre le système vous signale que le traitement a été libéré : écran « démarrage d’un travail en maintenance ».
  8. Sur cet écran, faites F10 pour passer en ligne de commande.
  9. exécuter la commande DSPMODSRC. Elle provoque l’affichage du source du programme. Indiquez tous les points d’arrêts voulus.
  10. Faites une fois F12 pour revenir en ligne de commande.
  11. Faites une fois F12 pour revenir à  l’écran « démarrage d’un travail en maintenance ».
  12. Faites Entrée pour lancer l’exécution du programme. Le débug se positionne au premier point d’arrêt que vous avez définit.
  13. A la fin du debug (ENDDBG), n’oubliez pas d’arrêter la maintenance du travail par la commande ENDSRVJOB.

[[Cette astuce ne fonctionnera que si le programme n’a pas été compilé avec l’option DBGVIEW=*NONE.]]

Une autre possibilité:

 sur une session STRDBG + nom de programme

 placer un point d’arrêt avec SBREAK + N° de ligne

 un message apparait sur la session dès qu’un job accède au programme, on peut alors lancer un STRSRVJOB + DEBUG.

Print Friendly, PDF & Email