GDB (The Gnu Debugger) est un debugger fournit en standard dans toute distribution Linux. Il permet de tracer pas à pas l'évolution d'un programme. Pour celà, il offre à l'utilisateur la possibilité de suivre l'évolution des différentes variables et de placer des points d'arrêt.
Pour pouvoir débugger un programme C, il faut le compiler avec l'option -g de gcc (le caractère % symbolise le prompt de votre interprète de commande):
% gcc -g prog.c
On lance alors le debugger comme suit:
% gdb a.out
On obtient alors le prompt de gdb:
(gdb)
Voici une liste (non exhaustive) des commandes utiles pour suivre l'évolution
du programme:
(gdb)
1 #include <stdio.h>
2 #include <stdlib.h>
3
4
int T[10];
5
int i, somme;
6
7
int main(void)
8
{
9
for (i = 0; i < 10; i++)
10
T[i] = rand() % 100;
11
somme = 0;
12
for (i = 0; i < 10; i++)
13
somme = somme + T[i];
14
printf("somme = %d\n",somme);
15
}
Breakpoint 1 at 0x80484e4: file
somme.c, line 11.
Breakpoint 2 at 0x8048504: file
somme.c, line 13.
Starting program: /home/...... ....../a.out
Breakpoint 1, main () at somme.c:11
11
somme = 0;
3: T = {83, 86, 77, 15, 93, 35,
86, 92, 49, 21}
2: i = 10
1: somme = 0
Nous sommes arrêtés sur le premier breakpoint en ligne
11. gdb affiche la prochaine instruction à exécuter (somme
= 0) et la valeur des différentes expressions en observation.
On remarque que somme vaut 0 alors que l'instruction n'a pas été
exécutée. Ceci est du au fait que par défaut les varaibles
globales sonr initalisées à 0.
12
for (i = 0; i < 10; i++)
2: i = 10
1: somme = 0
Continuing.
Breakpoint 2, main () at somme.c:13
13
somme = somme + T[i];
2: i = 0
1: somme = 0
Continuing.
Breakpoint 2, main () at somme.c:13
13
somme = somme + T[i];
2: i = 1
1: somme = 83
Breakpoint 3 at 0x8048528: file somme.c, line 14.
(gdb) c
Breakpoint 3, main () at somme.c:14
14
printf("somme = %d\n",somme);
2: i = 10
1: somme = 637
$1 = {83, 86, 77, 15, 93, 35, 86, 92,
49, 21}
$2 = 637
Continuing.
somme = 637
Program exited with code 014.