GNU Debugger (GDB) est un débogueur open source pour les systèmes GNU. Le débogueur est portable et peut être utilisé pour plusieurs langages comme C/C++ et Fortran. Il peut être utilisé pour déboguer des programmes en observant leurs états sur des points d'arrêt spécifiques et même en modifiant le flux ou les valeurs pour une exécution ultérieure. Habituellement, le GDB s'exécute en ligne de commande, mais plusieurs interfaces graphiques ont également été développées pour cela.
Dans cet article, nous explorons comment déboguer des programmes C à l'aide de GDB dans Ubuntu 20.04 LTS (Focal Fossa).
Prérequis
- Système Ubuntu 20.04
- Utilisateur avec des privilèges sudo pour renommer plusieurs fichiers.
Remarque : Les commandes décrites dans cet article ont été testées sur Ubuntu 20.04 LTS (Fosse focale).
Installer des packages
Installez les packages GN prérequis pour la compilation et le débogage. Exécutez la commande suivante dans le terminal :
$ sudo apt install gcc gdb -y
Exemple de programme C pour le débogage
Code
Avant de s'exécuter, un programme doit être compilé. Nous allons compiler le code C suivant dans le fichier main.c .
#include <stdio.h> int main() { for (int i=0; i<5; ++i) { printf("Iterator: %d\n", i); } return 0; }
Compiler le programme C avec GCC
Habituellement, un code C est compilé dans GCC à l'aide de la commande suivante :
$ gcc main.c -o bin
Un autre argument doit être fourni pour inclure les symboles dans le binaire. Ces symboles sont utilisés par GDB pour suivre et déboguer le programme. Exécutez la commande suivante dans le terminal pour compiler le code C :
$ gcc -g main.c -o bin
Un fichier exécutable nommé bin apparaîtra.
Exécuter le programme de test
Le fichier binaire nommé bin peut être exécuté comme n'importe quel autre fichier exécutable sur une interface de ligne de commande. Utilisez la commande suivante pour l'exécuter dans le terminal :
$ ./bin
La sortie du code apparaîtra.
Déboguer une application sous Linux
Lancer le débogueur
Exécutez l'utilitaire GDB à l'aide de la commande suivante dans le terminal :
$ gdb bin
Appuyez sur Entrée. La console du terminal GDB apparaîtra. Entrez le exécution dans cette console pour exécuter l'exécutable fourni à l'utilitaire en tant qu'argument.
(gdb) run
Déboguer les points d'arrêt
Ajouter des points d'arrêt
Les points d'arrêt peuvent être ajoutés de plusieurs manières. Nous ajouterons un point d'arrêt sur le printf fonction dans notre code. Exécutez la commande suivante dans le terminal pour ajouter un point d'arrêt :
(gdb) break printf
Alternativement, un numéro de ligne peut également être utilisé pour ajouter un point d'arrêt.
(gdb) break 6
Entrez le exécution commande et le programme s'arrêtera au point d'arrêt.
Parcourir les points d'arrêt
Utilisez la commande continuer pour continuer l'exécution du programme.
(gdb) continue
Il existe deux autres commandes à des fins différentes pour continuer l'exécution du programme :
- Étape :parcourt l'instruction machine suivante.
- Suivant :étapes pour parcourir la ligne de code suivante.
Des abréviations de commandes peuvent également être utilisées. Comme l'abréviation de continuer la commande est c.
(gdb) c
Informations sur les points d'arrêt
Les informations sur les points d'arrêt peuvent être observées en utilisant info commande de gdb . Exécutez la commande suivante sur le terminal :
(gdb) info breakpoints
Les informations sur les points d'arrêt apparaîtront.
Remarque :Le numéro à gauche du point d'arrêt est utilisé pour s'y référer par d'autres commandes.
Supprimer les points d'arrêt
Un point d'arrêt peut être supprimé à l'aide de la supprimer commande et en se référant au numéro de point d'arrêt observé dans la sortie de la info utilitaire.
(gdb) delete 1
Maintenant, le point d'arrêt a été supprimé et s'il est exécuté, le programme s'exécutera directement jusqu'à la fin.
Variables de surveillance
Les variables peuvent être surveillées à l'aide de l'utilitaire watch. Tout d'abord, nous devons entrer la portée dans laquelle la variable existe. Pour cela, ajoutez d'abord un point d'arrêt à l'aide de la commande suivante :
(gdb) break 6
Exécutez ensuite le code qui atteint ce point d'arrêt.
(gdb) r
Nous sommes maintenant dans la boucle où la variable i existe.
La montre la commande sera utilisée pour observer la valeur précédente et nouvelle de la variable i dans la boucle.
(gdb) watch i
Maintenant le point d'arrêt généré par watch apparaîtra également dans la liste des points d'arrêt. La liste des points d'arrêt peut être affichée à l'aide de la commande suivante :
(gdb) info breakpoints
De plus, nous n'avons pas besoin du point d'arrêt inséré plus tôt. Il peut être facilement supprimé à l'aide de la commande suivante :
(gdb) delete 1
Maintenant, si vous continuez, le code affichera les valeurs chaque fois que la variable a changé de valeur et affichera les anciennes et les nouvelles valeurs.
(gdb) c
D'autres itérations du programme peuvent également être observées, en utilisant la même commande.
Quitter le débogueur
Exécutez la commande suivante dans le terminal pour quitter le débogueur.
(gdb) quit
Cela ferme gdb utilitaire et l'invite de ligne de commande par défaut apparaîtra.
Conclusion
Dans cet article, nous avons exploré comment exécuter et casser un programme dans GDB. De plus, il a également été configuré pour se casser lorsque la valeur d'une variable a changé. Nous espérons que vous pourrez facilement déboguer vos programmes dans GDB après avoir suivi cet article.