GDB

Un débogueur (de l'anglais debugger) est un logiciel qui aide un développeur à analyser les bugs d'un programme. Pour cela, il permet d'exécuter le programme pas-à-pas — c'est-à-dire le plus souvent ligne par ligne —, d'afficher la valeur des variables à tout moment et de mettre en place des points d'arrêt sur des conditions ou sur des lignes du programme.

ref. Wikipédia

GDB

GNU Debugger, également appelé GDB, est le débogueur standard du projet GNU. Il est portable sur de nombreux systèmes type Unix et fonctionne pour plusieurs langages de programmation, comme le C, C++, Fortran, Ada, Objective-C, et le Go. Il fut écrit par Richard Stallman en 1988. GDB est un logiciel libre, distribué sous la licence GNU GPL.

ref. Wikipédia

Exemple

Comment déboguer un programme C à l'aide de gdb en 6 étapes simples (Liens vers le tutoriel original : Tutorial)

Soit le programme suivant:

# include <stdio.h>

int main()
{
	int i, num, j;
	printf ("Enter the number: ");
	scanf ("%d", &num );

	for (i=1; i<num; i++)
		j=j*i;    

	printf("The factorial of %d is %d\n",num,j);
}

Cependant, le programme factorial.c contient quelques erreurs pour notre objectif de débogage.

Après l’exécution du programme on obtiens:

$ gcc factorial.c

$ ./a.out
Enter the number: 3
The factorial of 3 is 0

On lance maintenant le débogage tout en passant en revue les commandes les plus utiles de gdb.

Étape 1. Compilez le programme C avec l'option de débogage -g

Compilez votre programme C avec l'option -g. Cela permet au compilateur de collecter les informations de débogage.

$ gcc -g factorial.c

Note: The above command creates a.out file which will be used for debugging as shown below.

Step 2. Launch gdb

Lancez le débogueur C (gdb) comme indiqué ci-dessous.

$ gdb a.out

Étape 3. Configurer un point d'arrêt dans le programme C

Syntax:
  • break line_number #Arrêt sur une ligne
  • break [file_name] #Arrêt sur un nom de fichier
  • break [func_name]#Arrêt sur un nom de fonction

Place un point d'arrêt dans le programme C, là où vous soupçonnez des erreurs. Lors de l'exécution du programme, le débogueur s'arrêtera au point d'arrêt et vous invitera à déboguer.

Alors avant de démarrer le programme, plaçons le point d'arrêt suivant dans notre programme.

(gdb) break 10
Breakpoint 1 at 0x804846f: file factorial.c, line 10.

Étape 4. Exécutez le programme C dans le débogueur gdb

(gdb) run a.out[args]

Vous pouvez commencer à exécuter le programme à l'aide de la commande run dans le débogueur gdb. Vous pouvez également donner des arguments de ligne de commande au programme via run args. L'exemple de programme que nous avons utilisé ici ne nécessite aucun argument de ligne de commande, alors lançons run et démarrons l'exécution du programme.

(gdb) run [args]
Starting program: /home/a.out

Une fois que vous avez exécuté le programme C, il s'exécutera jusqu'au premier point d'arrêt et vous donnera l'invite de débogage.

Breakpoint 1, main () at factorial.c:10
10			j=j*i;

Vous pouvez utiliser diverses commandes gdb pour déboguer le programme C comme expliqué dans les sections ci-dessous.

Step 5. Printing the variable values inside gdb debugger

Syntax: print {variable}
Examples:
print i
print j
print num
(gdb) p i
$1 = 1
(gdb) p j
$2 = 0
(gdb) p num
$3 = 3
(gdb)

Comme vous le voyez ci-dessus, dans factorial.c, nous n'avons pas initialisé la variable j. Ainsi, elle obtient une valeur par défaut nulle, ce qui donne lieu à l’erreur(fact=0)

Debbuger

By NadGy

Debbuger

  • 43