Activité GDB : Déboguer un programme avec GDB

Page 1 sur 2Lecteur de document UniversityLib

Activité GDB : Déboguer un programme avec GDB

Computer Science - Debugging and Programming in C · lab

Voir tous les documents en programmation

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