Pour ceux qui déboguent le langage C dans un environnement Linux, nous expliquerons comment utiliser gdb. Pour les débutants.
C'est un débogueur. Définissez des points d'arrêt, parcourez, Vous pouvez regarder à l'intérieur des variables, les réécrire, etc. Comme gcc, il est installé par défaut sous linux.
C'est un ancien outil qui fonctionne à partir de la ligne de commande. Ceci est utile pour le débogage dans un environnement où le débogueur IDE ne peut pas être utilisé.
mérite: ・ Peut être utilisé dans la plupart des environnements Linux -Peut être débogué en se connectant à un programme en cours d'exécution
Démérite: -Il n'y a pas d'écran GUI. Besoin de se souvenir des commandes
① Compilez le fichier source de manière déboguable gcc -g3 test.c → a.out est généré
(2) Exécutez le fichier objet généré à partir de la commande gdb gdb a.out → Après cela, gdb vous demandera d'entrer une commande.
③ Définissez un point d'arrêt avant l'exécution b test.c: 256 # Break sur la ligne 256 de test.c b main # function main Mettre une pause au début
④ Exécution run
(1) Vérifiez l'ID de processus (PID) du programme que vous souhaitez déboguer ps -ef | grep a.out
② attacher gdb # Exécuter sans arguments attach 12345 (pid confirmé dans ↑)
Après cela, vous pouvez utiliser gdb pour mettre des points d'arrêt et regarder des variables. Si vous souhaitez modifier le processus, vous pouvez détacher puis attacher un autre processus.
Voici les principales commandes. Tous sont écrits sous forme abrégée. (ex. pause-> b)
・ Pause liée
commander | effet |
---|---|
b func1 | Mettre un point d'arrêt sur la fonction func1 |
b test.c:123 | test.Mettre un point d'arrêt sur la ligne 123 de c |
w var1 | Définir le point de surveillance sur la variable var1 |
i b | Afficher la liste des points d'arrêt |
d no | Supprimer les points d'arrêt correspondant aux nombres |
・ Lié à l'exécution
commander | effet |
---|---|
n | Exécution par étapes(Courir ligne par ligne/Fonction saute) |
s | Exécution par étapes(Courir ligne par ligne/Entrez dans une fonction) |
c | Exécuter le traitement jusqu'au prochain point d'arrêt |
f | Exécuter le traitement jusqu'à quitter la fonction en cours |
u | Exécuter le traitement jusqu'à la sortie de la boucle en cours |
ret -1 | Renvoie la fonction actuelle-Quitter de force comme 1 * Le traitement ultérieur ne sera pas exécuté |
·référence
commander | effet |
---|---|
p var1 | Voir la valeur de la variable var1 (S'il s'agit d'une structure, un.Vous pouvez faire référence aux variables membres avec b. Si c'est un pointeur*Vous pouvez voir le contenu avec fp etc. p strlen(buf)、p buf[3]、p a->Vous pouvez voir b etc. de manière assez flexible) |
bt | Trace arrière(Chemin pour appeler la fonction courante)Spectacle |
l | Afficher le code source |
nom de macro de macro info | Vérifier la définition de la macro |
i lo | Voir toutes les variables locales |
・ Réécriture de la valeur
commander | effet |
---|---|
p var1=-1 | La valeur de la variable var1-Changer en 1 |
Vous pouvez utiliser les raccourcis utilisés dans bash etc. (Exemple: Déplacez le curseur au début de la ligne avec Ctrl + a. Référence: Comment utiliser readline) Il complète également les noms de variables et les commandes dans gdb avec la touche Tab. (Cela peut ne pas être possible dans un ancien environnement)
Exécutez set print elements 0
pour afficher toutes les informations de mémoire et de structure.
(Les grands tableaux et structures ne sont affichés qu'à mi-chemin par défaut)
Appuyez sur Ctrl-x puis 1 ou 2 pour entrer en mode TUI. L'écran est divisé en deux et vous pouvez exécuter la commande ci-dessus tout en regardant le code source. http://d.hatena.ne.jp/murase_syuka/20150912/1442021005
Pour les programmes qui génèrent des processus enfants, les commandes suivantes peuvent être utilisées pour déboguer les processus enfants.
set follow-fork-mode child
http://flex.phys.tohoku.ac.jp/texi/gdb-j/gdb-j_toc.html http://sourceware.org/gdb/current/onlinedocs/gdb/
Recommended Posts