GNU Debugger ou GDB Un puissant outil de débogage de code source pour les programmes Linux

GNU Debugger ou GDB Un puissant outil de débogage de code source pour les programmes Linux

Un débogueur joue un rôle vital dans tout système de développement de logiciels. Personne ne peut écrire un code sans bug en une seule fois. Au cours du développement, des bogues sont en cours de levée et doivent être résolus pour une amélioration supplémentaire. Un système de développement est incomplet sans débogueur. Compte tenu de la communauté des développeurs open source, GNU Debugger est leur meilleur choix. Il est également utilisé pour le développement de logiciels commerciaux sur les plateformes de type UNIX.

Débogage du code source avec le débogueur GNU

Débogueur GNU, aussi connu sous le nom gdb, nous permet de nous faufiler à travers le code pendant qu'il s'exécute ou ce qu'un programme essayait de faire en ce moment avant qu'il ne s'écrase. GDB nous aide essentiellement à faire quatre choses principales pour attraper des défauts dans le code source.

  1. Démarrer le programme, spécifiant les arguments qui peuvent affecter le comportement général.
  2. Arrêtez le programme sur les conditions spécifiées.
  3. Examiner l'accident ou quand le programme a été arrêté.
  4. Modifiez le code et pour expérimenter le code modifié instantanément.

Nous pouvons utiliser GDB pour déboguer les programmes écrits C et C ++ sans trop d'effort. À partir de maintenant, le support d'autres langages de programmation comme D, Modula-2, Frontran sont partiels.

Débutant avec GNU Debugger ou GDB

Gdb est invoqué en utilisant le gdb commande. En émission gdb, Il affiche des informations sur la plate-forme et vous introduit dans le (gdb) Invite comme indiqué ci-dessous.

[[Protégé par e-mail] ~] # GDB
Échantillon de sortie
GNU GDB (GDB) Fedora 7.6.50.20130731-19.FC20 Copyright (C) 2013 Free Software Foundation, Inc. Licence GPLV3 +: GNU GPL Version 3 ou version ultérieure C'est un logiciel gratuit: vous êtes libre de le modifier et de le redistribuer. Il n'y a pas de garantie, dans la mesure permise par la loi. Tapez "Afficher la copie" et "Afficher la garantie" pour plus de détails. Ce GDB a été configuré comme "x86_64-redhat-linux-gnU". Tapez "Afficher la configuration" pour les détails de configuration. Pour les instructions de rapport de bogues, veuillez consulter: . Trouvez le manuel GDB et d'autres ressources de documentation en ligne sur: . Pour obtenir de l'aide, tapez "AIDE". Tapez "APROPOS Word" pour rechercher des commandes liées à "Word". (gdb)

Taper aider Liste pour sortir les différentes classes de commandes disponibles dans GDB. Taper aider suivi d'un nom de classe pour une liste de commandes dans cette classe. Taper aider tous Pour la liste de toutes les commandes. Nom de commande Les abréviations sont autorisées si elles sont sans ambiguïté. Par exemple, vous pouvez taper n au lieu de taper suivant ou c pour continuer et ainsi de suite.

Commandes GDB les plus couramment utilisées

Couramment utilisé Commandes GDB sont répertoriés dans le tableau suivant. Ces commandes doivent être utilisées à partir de l'invite de commande GDB (gdb).

Commande Description
courir Démarrer une exécution du programme
arrêter Quitter GDB
imprimer expr Imprimer l'expression où expr Peut aussi être un nom variable
suivant Aller à la ligne suivante
marcher Entrez dans la ligne suivante
continuer Continuer à partir de la ligne actuelle jusqu'à la fin du programme ou le prochain point de rupture

Notez la différence entre les deux commandes marcher et suivant. Le suivant La commande ne va pas à l'intérieur de la fonction si la ligne suivante est un appel de fonction. Alors que marcher La commande peut entrer dans la fonction intérieure et voir ce qui se passe là-bas.

Un exemple de session avec GDB

Considérez le code source suivant.

// somme.c #include int sum (int a, int b) int c; c = a + b; Retour C;  int main () int x, y, z; printf ("\ nenter Le premier numéro:"); scanf ("% d", & x); printf ("Entrez le deuxième numéro:"); scanf ("% d", & y); z = sum (x, y); printf ("La somme est% d \ n \ n", z); retour 0; 

Afin de déboguer le fichier de sortie, nous devons compiler la même chose -g option de GCC comme suit.

$ gcc -g somme.C -o somme

Le fichier de sortie somme Peut être attaché à GDB via l'une des 2 façons suivantes:

1. En spécifiant le fichier de sortie comme argument à GDB.

$ gdb somme

2. Exécution du fichier de sortie dans GDB en utilisant déposer commande.

$ GDB (GDB) Somme de fichier

Le liste La commande répertorie les lignes dans le fichier de code source et déplace le pointeur. Alors d'abord liste affichera les 10 premières lignes et prochain liste affiche les 10 suivants et ainsi de suite.

(gdb) Liste 1 #include 2 3 int sum (int a, int b) 4 int c; 5 c = a + b; 6 retour c; 7 8 9 int main () 10 int x, y, z;

Pour commencer l'exécution, émettez le courir commande. Maintenant, le programme est exécuté normalement. Mais nous avons oublié de mettre des points d'arrêt dans le code source pour le débogage, à droite? Ces points d'arrêt peuvent être spécifiés pour les fonctions ou sur des lignes spécifiées.

(gdb) b principal

Note: J'ai utilisé une abréviation b pour casser.

Après avoir défini le point de rupture à la fonction principale, le relâchement du programme s'arrêtera à la ligne 11. La même chose peut être mise en œuvre si le numéro de ligne est connu avant.

(gdb) b somme.c: 11

Maintenant, parcourez les lignes de code en utilisant le suivant ou n commande. Il est important de noter que suivant La commande ne va pas dans le code de fonction à moins qu'un point de rupture ne soit défini sur la fonction. Essayons le imprimer commander maintenant. Définir le point de rupture sur la somme de la fonction comme ci-dessous.

(GDB) B Sum Point d'arrêt 1 à 0x4005aa: somme de fichiers.C, ligne 5. (gdb) r Programme de démarrage: / root / sum Entrez le premier numéro: 2 Entrez le deuxième numéro: 3 Breakpoint 1, somme (a = 2, b = 3) à la somme.C: 5 5 C = A + B; (gdb) p a 1 $ = 2 (gdb) p b 2 $ = 3 (gdb) c continuant. La somme est 5 [inférieure 1 (processus 3444) qui est sortie normalement]

Si le programme en cours d'exécution nécessite des paramètres de ligne de commande, fournissez la même chose avec le courir commander comme.

(gdb) courir… 

Les fichiers de bibliothèque partagés associés au programme en cours d'exécution actuel peuvent être répertoriés comme.

(GDB) Info Partager de Syms Lire la bibliothèque d'objets partagés 0x00000035A6000B10 0x00000035A6019C70 Oui / Lib64 / Ld-Linux-X86-64.donc.2 0x00000035A641F560 0x00000035A6560BB4 OUI / LIB64 / LIBC.donc.6

Modification des variables

Gdb est également capable de modifier les variables tout au long de l'exécution du programme. Essayons ceci. Comme mentionné ci-dessus définir le point de rupture à la ligne 16 et exécutez le programme.

(gdb) r Programme de démarrage: / root / sum Entrez le premier numéro: 1 entrez le deuxième numéro: 2 Breakpoint 1, main () en somme.C: 16 16 printf ("La somme est% d \ n \ n", z); (gdb) set z = 4 (gdb) c continuant. La somme est 4

Maintenant a = 1, b = 2 et le résultat devrait être z = 3. Mais ici, nous avons changé le résultat final pour z = 4 Dans la fonction principale. De cette façon, le débogage peut être facilité en utilisant GDB.

Activer / désactiver les points d'arrêt

Pour obtenir la liste de tous les points d'arrêt Points de rupture d'informations.

(GDB) Informations Points de rupture Points de rupture Disp enb Adresse de ce que 1 point d'arrêt garde y 0x00000000004005C2 en main à la somme.c: 11

Ici, il n'y a qu'un seul point de rupture et c'est à. activé Désactiver les points d'arrêt Spécifiez le numéro de point d'arrêt avec le désactiver commande. Pour activer ensuite utiliser le activer commande.

(GDB) Désactiver 1 (GDB) Informations Points d'arrêt Informations Num Type Disp enB Adresse de ce que 1 point d'arrêt garde n 0x00000000004005C2 en main à la somme.c: 11

Vous pouvez également supprimer les points d'arrêt avec supprimer commande.

Débogage des processus de course

De nombreux processus s'exécutent en arrière-plan dans un système GNU / Linux. Pour déboguer un processus en cours d'exécution, nous avons besoin pour trouver l'identifiant de processus de ce processus particulier. picof La commande vous donne le pid d'un processus.

$ pidof 

Maintenant, nous devons attacher ce PID à GDB. Il y a 2 façons.

1. En spécifiant PID avec GDB.

$ gdb -p 

2. En utilisant attacher Commande de GDB.

(gdb) attacher 

C'est tout pour le moment. Ce ne sont que des bases de GDB pour bien démarrer dans le code source de débogage et c'est bien plus que les choses expliquées ci-dessus. Par exemple, nous pouvons déboguer en utilisant les informations de pile, les variables environnementales et beaucoup plus. Essayez de jouer avec toutes ces choses…