3. Débogage JEVEUX#
L’usage de JEVEUX peut conduire à certaines erreurs particulières.
Deux outils permettent au développeur de détecter ces erreurs:
le mode d’exécution en “debug jeveux”
la routine jxveri.F90
3.1. « debug jeveux »#
Le mode d’exécution “debug jeveux” s’active dans ASTK en cochant Options/Paramètres/dbgjeveux avant de lancer l’exécution.
Le code s’exécute alors (plus lentement) en provoquant systématiquement la lecture et/ou l’écriture des objets JEVEUX lorsqu’ils sont demandés ou libérés de la mémoire (routines jeveuo, jelibe, jedema). De plus, quand un objet jeveux est détruit (jedetr, jedetc), la zone mémoire qu’il occupait est mise à “undef”. Ce comportement du code permet de provoquer une erreur d’exécution quand:
On continue à utiliser un objet après sa destruction
On continue à utiliser un objet qui a été “libéré”
On écrit dans un objet alors qu’on a demandé un accès en “lecture”.
3.2. JXVERI#
jxveri.F90 est la subroutine de Code_Aster permettant de détecter un écrasement dans la mémoire statique de JEVEUX.
Elle est utile lorsque le code s’arrête avec l’un des messages d’erreur suivants:
JEVEUX_15 : Ecrasement amont ...
JEVEUX_16 : Ecrasement aval ...
JEVEUX_17 : Chainage cassé …
L’objet du débogage est alors de localiser l’instruction qui provoque l’écrasement de la mémoire JEVEUX. Pour cela, on agit par itérations successives.
1ère étape
On localise la commande coupable en utilisant DEBUT(DEBUG=_F(JXVERI=’OUI’) )
2ème étape
On surcharge (en mode debug) la routine op00ij correspondant à la commande coupable en la “truffant” de call jxveri(’ ‘,’ ‘) :
subroutineop00ij(...)
...
call jxveri(' ',' ')
bloc 1
call jxveri(' ',' ')
bloc 2
call jxveri(' ',' ')
bloc 3
call jxveri(' ',' ')
end
Lors de l’exécution du code ainsi surchargé, le code s’arrêtera en erreur fatale au 1er appel à jxveri coupable. Si par exemple, il a lieu à la fin du bloc 2 (on connait la ligne grâce au “traceback” imprimé par le débogueur “ post-mortem ”), alors, on réitère le processus en ajoutant des “call jxveri” entre les différentes instructions du bloc 2. Et ainsi de suite …
Dans la pratique, le processus converge assez rapidement vers l’instruction fautive.