Débogage
Objectif : éliminer les erreurs dans les programmes → débogueur
Déboguer un programme consiste à l'arrêter sous certaines conditions pour examiner l'état de la pile d'appels et les valeurs stockées dans les variables.
L'utilisation d'un débogueur nécessite l'ajout de l'option -g
à la compilation.
Conseils avant de de déboguer :
- Aérer le code de commentaires
- Indenter les lignes du code
- Aucune optimisation de code
- Afficher les messages de compilation
Utilisation de gdb (GNU)
Tout d'abord on compile le programme avec l'option -g
$ gcc -g program.c -o program
Puis on lance le débogueur :
[user@mesocomte0 matmul]# gdb matmul_for_debug.exe GNU gdb Fedora (6.8-27.el5) Copyright (C) 2008 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-redhat-linux-gnu"... (gdb)
Une console s'affiche et invite l'utilisateur à taper des commandes de débogage.
La liste des commandes de débogage les plus utilisées :
Commande | Description |
---|---|
r <param> | Exécute le programme : r param1 param2 |
l <ligne> | Liste le programme source : l . Affiche uniquement la ligne <ligne> : l 29 . Si plusieurs fichiers sources : l toto.c:29 |
b <ligne> | b (Breakpoint) un point d'arrêt : b 30. b main . Un point d'arrêt conditionnel: b 3 Z > 92 |
c | c (Continue continue) l'exécution après un arrêt |
display var | Affiche le contenu d'une variable : display toto |
printf | Affichage formaté des variables : printf "X = %d, Y = %d\n",X,Y |
n | n (Next) exécute la ligne suivante du programme et PAUSE |
s | s (Step) exécute la 1ere ligne de la fonction suivante et PAUSE |
bt | bt (Backtrace) indique l'emplacement de l'erreur dans le programme |
Utilisation de idb (Intel)
idb est un débogueur symbolique textuel fourni avec les compilateurs d'Intel.