Dans une phase de débogage, les options suivantes peuvent être d'une aide précieuse :
-g
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é,-qnooptimize ou -O0 (o majuscule et zéro)
permet d'inhiber toute optimisation,-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 la mise en évidence à l'exécution des opérations portant sur
des valeurs invalides NaN.-qflttrap=overflow:underflow:zerodivide:invalid:enable
permet de détecter les exceptions (overflow, underflow,
division par zéro, opération invalide).-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 Vargas, 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.-qextchk
(option inutilisable sur un code MPI) pour vérifier, entre autres, la
cohérence des types et des profils de tableaux. Le compilateur
vérifie ainsi que les déclarations d'un même bloc commun dans
plusieurs unités de programme sont cohérentes. Il vérifie que le type
d'un paramètre d'une procédure est identique à celui de l'argument
correspondant dans un appel de cette procédure, même si l'interface de
la procédure n'est pas explicite. Cette option est utile non seulement
à la compilation mais aussi à l'édition de liens.-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 :
vargas : f90 -g -C -qsigtrap debordement.f90
vargas : ./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 :
vargas : f90 -qnooptimize -g -C -qinitauto=7FBFFFFF \ -qflttrap=overflow:underflow:zerodivide:invalid:enable -qfloat=nans \ -qsigtrap -qextchk -qkeepparm -qlanglvl=90std test.f90 vargas : ./a.out
Voir aussi le paragraphe : Outils de débogage.