Commande Linux gdb

Linux 命令大全Référence des commandes Linux


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

# Ubuntu/Debian
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

# Démarrer gdb et charger le programme
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

# Exécuter le programme
(gdb) run
# Ou en abrégé
(gdb) r

# Exécuter avec des arguments
(gdb) run arg1 arg2

Gestion des points d'arrêt

Exemples

# Définir un point d'arrêt à la ligne spécifiée
(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

# Continuer l'exécution jusqu'au prochain point d'arrêt
(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

# Voir le code près de la ligne actuelle
(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

# Afficher la valeur de la variable
(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

# Afficher la pile d'appels
(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

# Déclencher le point d'arrêt lorsque i est égal à 5
(gdb) break 10 if i == 5

Points de surveillance

Exemples

# Mettre en pause lorsque la variable est modifiée
(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

# Afficher tous les threads
(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

# Charger le fichier core dump
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 src  # Afficher la fenêtre du code source
(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

# Activer l'affichage lisible
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

  1. Assurez-vous que l'-goption est utilisée pendant la compilation
  2. Vérifiez si le code source se trouve au même emplacement qu'au moment de la compilation
  3. Utilisez ladirectorycommande 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.


Linux 命令大全Référence des commandes Linux

Autres extensions