Dans une phase de débogage, les options suivantes peuvent être d'une aide précieuse :
-g (option activée par défaut à l'IDRIS)
génère une table des symboles (numéro de ligne, variables, ...) qui
pourra être exploitée par un débogueur par la suite. Elle permet aussi de
générer les numéros d'instructions dans les tracebacks. Cette option
conserve le niveau d'optimisation demandé.-qfullpath
inscrit les chemins d'accès aux fichiers source et d'include dans les fichiers
objets (doit être combinée avec -g). Elle permet au débogueur de
trouver automatiquement les fichiers source.-qnooptimize
permet d'inhiber toute optimisation.-qoptdebug
permet de conserver le niveau d'optimisation. Pour chaque fichier source,
un fichier (ayant l'extension .optdbg) est généré. Il contient un pseudocode
optimisé pouvant être lu par un débogueur.-qdebug=diagnostic
affiche des informations sur l'utilisation de la double FPU.-qinitauto=7FBFFFFF
initialise au préalable toutes les variables temporaires à NaNs (ou à
zéro si -qinitauto seul).-C
génère un signal SIGTRAP lorsqu'un tableau est adressé en dehors de ses bornes
(bound checking). Pour intercepter ce signal l'option
-qsigtrap décrite ci-dessous est nécessaire.-qfloat=nans
permet de détecter l'apparition de valeurs invalides NaN lors des conversions
de double précision en simple précision.-qflttrap=overflow:underflow:zerodivide:invalid:enable -qarch=450
permet de détecter les exceptions (overflow, underflow,
division par zéro, opération invalide). Il faut obligatoirement spécifier
-qarch=450 (avec l'architecture 450D, la double unité arithmétique
flottante ne génère pas d'exceptions) et -qsigtrap pour intercepter les exceptions.-qsigtrap
intercepte le signal SIGTRAP émis suite à une exception ou à un débordement
de tableau et interrompt l'exécution avec impression d'une traceback
(voir aussi l'option -g).-qsave
force le mode d'exécution statique. Sur Babel, par défaut, nous
sommes en mode stack (recommandé mais révélateur d'erreurs de
programmation cachées par le mode statique !) ; les variables
locales sont alors stockées temporairement dans la zone mémoire dite
stack. Si cette option provoque un retour à la "normale", il
faut sûrement incriminer des variables locales non initialisées ou non
sauvegardées à tort (cf. attribut SAVE), comme les compteurs
incrémentés à chaque appel de procédure.-qkeepparm pour obliger le compilateur à conserver dans
le stack les valeurs des arguments d'appel (certaines optimisations
peuvent changer cela). Celles-ci seront ainsi récupérables dans n'importe
quel débogueur.Il existe aussi une option -qlanglvl
pour vérifier la conformité du source à une norme Fortran. Par exemple
-qlanglvl=95std pour la norme Fortran 95.
Exemple de gestion de débordement de tableaux :
Babel : mpixlf90_r -g -C -qsigtrap debordement.f90
Babel : bgrun -np 64 -exe /path_to_exec/a.out
Signal received: SIGTRAP - Trace trap
Fortran language trap: subscript out of bounds
Traceback:
Offset 0x00000090 in procedure debord, near line 6 in file debordement.f90
--- End of call chain ---
Exemple utilisant toutes les options décrites :
Babel : mpixlf90_r -g -qsigtrap -qoptdebug -qfullpath -C -qinitauto=7FBFFFFF \
-qflttrap=overflow:underflow:zerodivide:invalid:enable -qarch=450 \
-qfloat=nans -qsigtrap -qkeepparm -qlanglvl=90std test.f90