Activité GDB : Déboguer un programme avec GDB
Soit le programme C « exemple.c » suivant :
#include "stdio.h"
void affichage(char *message)
{
int i=3;
do {
printf("%c", (*message)+i);
} while (*++message);
printf("\n");
}
int main()
{
Publicité
char * mauvais_message=NULL;
char * bon_message="Hello, world.";
affichage(bon_message);
affichage(mauvais_message);
}
Lancer la commande :
$ gcc -g exemple.c -o exempleexec
1- Interpréter les options utilisées dans cette commande.
2- Quelle est la commande qui permet de lancer l’exécutable produit ?
3- En lançant cet exécutable, le bug « erreur de segmentation » (ou core dump) s’affiche.
Donner un imprime-écran qui illustre le message affiché. A quoi est du ce bug
4- Sachant que GDB fonctionne sur le principe d’une invite de commandes, utiliser le
debugger GDB afin de localiser les causes du bug. Le moyen le plus courant de
Publicité
démarrer une session de gdb est de préciser l'exécutable qu'on veut débugger en
paramètre :
$ gdb exempleexec
W. Barhoumi
MP2L
Novembre 2013
En retour, GDB charge tout ce dont il a besoin et présente une invite (gdb). Donner un
imprime-écran qui illustre ceci.
5- Maintenant, ayant l’invite de GDB, lancer le programme sous GDB. Donner un
imprime-écran qui illustre ceci. Interpréter le message affiché et déduire la ligne du
programme qui a provoqué le bug.
6- Quelle commande faut-il utiliser sous GBD afin d’afficher la pile des appels des
fonctions pour mieux localiser l’endroit de l'erreur de segmentation ? Donner un
Publicité
imprime-écran qui illustre ceci. Interpréter le message affiché.
7- GDB permet également de marcher à travers le programme en cours d'exécution afin
que vous puissiez suivre attentivement ses étapes. Pour ce faire, utiliser les
commandes : break, print, next et step comme suit :
(gdb) break main
(gdb) run
(gdb) print mauvais_message
(gdb) next
(gdb) print mauvais_message
(gdb) next
(gdb) next
(gdb) step
(gdb) step
Publicité
(gdb) step
(gdb) print (*message)+i
(gdb) quit
Donner un imprime-écran qui illustre la sortie de chaque commande sous GDB tout en
interprétant les messages affichés.
W. Barhoumi
MP2L
Novembre 2013