Ceci est une ancienne révision du document !
Table des matières
Lancement
- Soit les paramètres de l'application (facultatif, on peut de faire une fois GDB lancé) :
gdb --args program args
- Soit le dump à analyser :
gdb program dump gdb -c dump
Options
Par défaut
Ajouter dans le fichier $HOME/.gdbinit
les commandes à exécuter au démarrage. Par exemple set height 0
.
Description
Ne plus avoir de points d'arrêt quand l'affichage d'une donnée prend plus que la taille de l'écran (bt
ou display
notamment).
Démarrer le débogage
Avec un point d'arrêt sur le main :
start
Sans point d'arrêt initial :
run
Une fois arrêté
La pile
- Seulement la hiérarchie des fonctions
bt
- Avec les variables locales
bt full
Afficher le code
- Afficher plus que la seule ligne en cours
list
- Activer l'interface graphique (TUI)
CTRL+X + CTRL+A
- Rafraîchir l'interface graphique (peut être nécessaire si un printf est exécuté dans le programme)
CTRL+L
- Multi fenêtre
CTRL+X + 2
Répéter de fois autant de nécessaire pour avoir la combinaison de fenêtre : code C / code assembleur, code assembleur / registres, registres / code C.
Pour modifier le contenu de la fenêtre des registres, il faut faire tui reg XXX
avec XXX : general
/ float
/ system
/ vector
/ all
.
- Touches haut et bas
Avant les touches haut et bas permettaient de faire défiler les commandes précédentes / suivantes. En mode TUI, haut et bas font défiler la fenêtre en cours. Il faut utiliser CTRL+P
et CTRL+N
. #Simplicité…
Breakpoints
La liste
info breakpoints info watchpoints
Les enlever
clear delete n
Conditions
b Message.cpp:112 if i == 99
Exception
Mettre un point d'arrêt sur une exception qui est catch
: catch throw
.
Naviguer dans le débogage
- Avancer d'une ligne de code sans entrer dans une éventuelle sous-fonction
next
- Avancer d'une ligne de code en entrant dans une éventuelle sous-fonction
step
- Reprendre le cours de l'application
continue
Scripts
- Relancer l'application en boucle
Utile si le plantage d'un programme est aléatoire
Mettre un point d'arrêt sur le début du main
(id 1) et sur la fin (id 2).
Taper :
command 1 record continue end
command 2 run end
Bugs
decode_line_full: Assertion `state->canonical_names[i].suffix != NULL' failed.
Il faut supprimer tous les breakpoints
/ watchpoints
. Trouvé depuis LPCXpresso pour ARM.
Failed to Debug with GDB: Breakpoints or Expressions on non-existing Locations | MCU on Eclipse Archive du 11/10/2014 le 07/01/2020
N'existe plus depuis la version v4.9 (Bug #1380026 “Internal GDB failure and crash for breakpoint with...” Bugs GNU ARM Embedded Toolchain Archive du 11/10/2014 le 07/01/2020