28 mars 2025

Execution error : error code: 162, Arithmetic overflow or underflow

A l'occasion d'une migration Linux, le projet a recompilé l'application avec une nouvelle version de Microfocus Cobol et de nouvelles options.

A l'occasion de tests batch, le programme de calcul de paie s'interrompt parfois avec l'erreur :

Execution error : file 'JFCALDBI'
error code: 162, pc=0, call=1, seg=0
162     Arithmetic overflow or underflow

Il se trouve qu'un traitement de paie effectue une division par zéro.

En effet les options utilisées avec le nouveau compilateur Visual Cobol sont moins permissives que celles de l'ancien Server Express. 

  • NOCHECK
    • (NO)CHECKDIV qui contrôle  les divisions par zéro
    • (NO)CHECKNUM qui contrôle la numéricité des rubriques
  • BOUND contrôle les débordements de tableau occursés.

L'option NOCHECK désactive les options CHECKNUM et CHECKDIV. 
Avec NOCHECKDIV une division par zéro provoque une erreur bloquante du programme.

Si cela se produit en développement ou recette, il est possible d'activer des traces, repérer le traitement fautif et lui ajouter un contrôle pour ne pas provoquer l'erreur. Problème : si l'arrêt brutal du programme se produit en production, il met en danger l'exploitation des traitements batch.  

Pour débloquer la situation et laisser passer les divisions par zéro et les débordements de tableaux, retirer -C NOCHECK et -C BOUND puis placer les options suivantes dans le fichier adm/cfg/config :

COBFLAGS=-C ASSIGN=EXTERNAL -C SEQUENTIAL=LINE -C NOANIM -C NOCSI -C CHECKDIV -C NOCHECKNUM -C NOSERIAL -C IBMCOMP -C SIGN=EBCDIC -C WRITELOCK -C NOTRUNC -C NOBOUND -C PERFORM-TYPE=MF -C COPYLIST -C NORESEQ -C TRACE -U

Recompiler les programmes.

On supprime NOCHECK que l'on décompose en CHECKDIV et NOCHECKNUM.
On remplace BOUND par NOBOUND.

Attention toutefois : si le programme semble se dérouler normalement, une division par zéro donne "an undefined result" ... Quand au débordement de tableau, il écrase les variables définies au delà.

Aucun commentaire:

Enregistrer un commentaire