Commande Linux gdb
GDB (GNU Debugger) est l'outil de débogage de programmes le plus couramment utilisé sur les systèmes Linux. Il peut aider les développeurs :
- Tracer le flux d'exécution du programme
- Définir des points d'arrêt pour suspendre l'exécution du programme
- Afficher et modifier les valeurs des variables
- Analyser les causes des plantages de programmes
- Inspecter la pile d'appels de fonctions
GDB prend en charge plusieurs langages de programmation, notamment C, C++, Objective-C, Fortran, Ada, etc., et est un outil de débogage indispensable pour les développeurs Linux.
Installer gdb
Sur la plupart des distributions Linux, gdb peut être facilement installé via le gestionnaire de paquets :
Exemples
sudo apt-get install gdb
# CentOS/RHEL
sudo yum install gdb
# Fedora
sudo dnf install gdb
# Arch Linux
sudo pacman -S gdb
Après l'installation, vous pouvez vérifier si l'installation a réussi avec la commande suivante :
gdb --version
Compiler un programme débogable
Pour déboguer un programme avec gdb, vous devez ajouter le-goption lors de la compilation pour générer des informations de débogage :
gcc -g program.c -o program
-gCette option intègre les informations du code source dans le fichier exécutable, permettant à gdb de faire correspondre les instructions machine au code source.
Commandes de base de gdb
Démarrer et quitter gdb
Exemples
gdb ./program
# Démarrer gdb et s'attacher à un processus en cours d'exécution
gdb -p PID
# Quitter gdb
(gdb) quit
# Ou en abrégé
(gdb) q
Exécuter le programme
Exemples
(gdb) run
# Ou en abrégé
(gdb) r
# Exécuter avec des arguments
(gdb) run arg1 arg2
Gestion des points d'arrêt
Exemples
(gdb) break 10
# Ou en abrégé
(gdb) b 10
# Définir un point d'arrêt à l'entrée de la fonction
(gdb) break main
(gdb) break function_name
# Afficher tous les points d'arrêt
(gdb) info breakpoints
# Supprimer les points d'arrêt
(gdb) delete 1 # Supprimer le point d'arrêt numéro 1
(gdb) delete # Supprimer tous les points d'arrêt
Contrôle de l'exécution du programme
Exemples
(gdb) continue
# Ou en abrégé
(gdb) c
# Exécuter pas à pas (entrer dans les fonctions)
(gdb) step
# Ou en abrégé
(gdb) s
# Exécuter pas à pas (passer au-dessus des fonctions)
(gdb) next
# Ou en abrégé
(gdb) n
# Terminer l'exécution de la fonction en cours et revenir
(gdb) finish
Voir le code
Exemples
(gdb) list
# Ou en abrégé
(gdb) l
# Voir le code près de la ligne spécifiée
(gdb) list 15
# Voir le code de la fonction spécifiée
(gdb) list main
Inspecter les variables et la mémoire
Exemples
(gdb) print variable_name
# Ou en abrégé
(gdb) p variable_name
# Modifier la valeur de la variable
(gdb) print variable_name = new_value
# Afficher le type de variable
(gdb) ptype variable_name
# Afficher le contenu de la mémoire
(gdb) x/10xw &variable # Afficher 10 mots en hexadécimal
Analyse de la pile d'appels
Exemples
(gdb) backtrace
# Ou en abrégé
(gdb) bt
# Basculer vers la trame de pile spécifiée
(gdb) frame 2
# Ou en abrégé
(gdb) f 2
Techniques avancées de débogage
Points d'arrêt conditionnels
Exemples
(gdb) break 10 if i == 5
Points de surveillance
Exemples
(gdb) watch variable_name
# Mettre en pause lorsque la variable est lue
(gdb) rwatch variable_name
# Mettre en pause lorsque la variable est lue ou modifiée
(gdb) awatch variable_name
Débogage multithread
Exemples
(gdb) info threads
# Basculer vers le thread spécifié
(gdb) thread 2
# Autoriser uniquement le thread actuel à s'exécuter
(gdb) set scheduler-locking on
Débogage des fichiers core dump
Exemples
gdb ./program core
# Afficher la pile d'appels au moment du crash
(gdb) bt
interface graphique de gdb
gdb prend également en charge un mode d'interface graphique, qui peut être lancé à l'aide de la-tuioption:
gdb -tui ./program
Ou y basculer en cours d'utilisation :
Exemples
(gdb) layout asm # Afficher la fenêtre d'assembleur
(gdb) layout regs # Afficher la fenêtre des registres
(gdb) layout split # Afficher simultanément le code source et l'assembleur
Configuration pratique de gdb
Vous pouvez ajouter des configurations courantes au~/.gdbinitfichier :
Exemples
set print pretty on
# Définir la taille de l'historique
set history save on
set history size 1000
# Commandes personnalisées
define printarray
set $i = 0
while $i < $arg0
printf "array[%d] = %dn", $i, $arg1[$i]
set $i = $i + 1
end
end
Dépannage des problèmes courants
Impossible de voir le code source lors du débogage
- Assurez-vous que l'
-goption est utilisée pendant la compilation - Vérifiez si le code source se trouve au même emplacement qu'au moment de la compilation
- Utilisez la
directorycommande pour ajouter le chemin du code source :
(gdb) directory /path/to/source
Débogage de code optimisé
L'optimisation peut modifier l'ordre d'exécution du code, ce qui rend le débogage difficile. Il est recommandé de désactiver l'optimisation lors du débogage :
gcc -O0 -g program.c -o program
Résumé
gdb est un outil de débogage puissant sous Linux. Le maîtriser peut considérablement améliorer l'efficacité du débogage. Cet article présente l'utilisation de base et les commandes courantes de gdb. Les lecteurs sont invités à consolider ces connaissances par une pratique réelle du débogage. Avec l'expérience, vous constaterez que gdb peut vous aider à résoudre divers problèmes de débogage complexes.
Autres extensions
Référence des commandes Linux