Babel : options de débogage du compilateur C/C++

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éros de ligne, variables, …) qui pourra être exploitée par un débogueur par la suite. 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.
  • -qcheck=bounds vérifie si l'on n'adresse pas un tableau en dehors de ses bornes (bounds checking).
  • -qcheck=nullptr vérifie la validité des adresses contenues dans les variables de type pointeur.
  • -qcheck=divzero permet de détecter les divisions entières par zéro.
  • -qcheck=all regroupe les 3 options ci-dessus.
  • -qfloat=nans:spnans 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).
  • -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).
  • -qdbxextra inclut toutes les définitions de type enum, struct, union dans les fichiers objet pour qu'elles puissent être exploitées par un débogueur (doit être combinée avec -g).
  • -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.
  • -qinitauto=7FBFFFFF initialise au préalable toutes les variables temporaires à NaNs (ou à zéro si -qinitauto seul).
  • -qkeepparm oblige 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 C donnée. Par exemple -qlanglvl=stdc99 pour la norme standard ISO C99.

Par exemple, pour utiliser toutes les options décrites :

Babel : mpixlc_r -g -qsigtrap -qoptdebug -qcheck=all -qinitauto=7FBFFFFF 
    -qflttrap=overflow:underflow:zerodivide:invalid:enable -qarch=450 
    -qfloat=nans:spnans -qkeepparm -qdbxextra -qfullpath source.c

Babel : mpixlcxx_r -g -qqoptdebug -qcheck=all -qinitauto=7FBFFFFF 
    -qflttrap=overflow:underflow:zerodivide:invalid:enable -qarch=450 
    -qfloat=nans:spnans -qkeepparm -qdbxextra -qfullpath source.C