GDB - Exemple de débogage 1

Écrivons un programme pour générer un vidage de mémoire.

#include <iostream>
using namespace std;  

int divint(int, int);  
int main() 
{ 
   int x = 5, y = 2; 
   cout << divint(x, y); 
   
   x =3; y = 0; 
   cout << divint(x, y); 
   
   return 0; 
}  

int divint(int a, int b) 
{ 
   return a / b; 
}

Pour activer le débogage, le programme doit être compilé avec l'option -g.

$g++ -g crash.cc -o crash

NOTE: Nous utilisons le compilateur g ++ car nous avons utilisé le code source C ++.

Maintenant, lorsque vous exécutez ce programme sur votre machine Linux, il produira le résultat suivant:

Floating point exception (core dumped)

Vous trouverez un fichier core dans votre répertoire actuel.

Maintenant, pour déboguer le problème, démarrez le débogueur gdb à l'invite de commande:

$gdb crash 
# Gdb prints summary information and then the (gdb) prompt
  
(gdb) r 
Program received signal SIGFPE, Arithmetic exception. 
0x08048681 in divint(int, int) (a=3, b=0) at crash.cc:21 
21        return a / b; 

# 'r' runs the program inside the debugger 
# In this case the program crashed and gdb prints out some 
# relevant information.  In particular, it crashed trying 
# to execute line 21 of crash.cc.  The function parameters 
# 'a' and 'b' had values 3 and 0 respectively.  

(gdb) l 
# l is short for 'list'.  Useful for seeing the context of 
# the crash, lists code lines near around 21 of crash.cc  

(gdb) where 
#0  0x08048681 in divint(int, int) (a=3, b=0) at crash.cc:21 
#1  0x08048654 in main () at crash.cc:13 
# Equivalent to 'bt' or backtrace.  Produces what is known 
# as a 'stack trace'.  Read this as follows:  The crash occurred 
# in the function divint at line 21 of crash.cc.  This, in turn, 
# was called from the function main at line 13 of crash.cc  

(gdb) up 
# Move from the default level '0' of the stack trace up one level 
# to level 1.  

(gdb) list 
# list now lists the code lines near line 13 of crash.cc  

(gdb) p x 
# print the value of the local (to main) variable x

Dans cet exemple, il est assez évident que le plantage se produit en raison de la tentative de diviser un entier par 0.

Pour déboguer un programme 'crash' qui s'est écrasé et a produit un fichier core nommé 'core', tapez ce qui suit sur la ligne de commande:

gdb crash core

Comme cela équivaut principalement à démarrer gdb et à taper la commande «r», toutes les commandes ci-dessus peuvent maintenant être utilisées pour déboguer le fichier.