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).
Points d'arrêt
- La liste
info breakpoints info watchpoints
- Les enlever
clear delete n
- Les désactiver
Certaines applications génèrent beaucoup d'exceptions.
handle SIGSEGV nostop noprint pass
- Suivre les enfants / fork
set follow-fork-mode child
Conditions
b Message.cpp:112 if i == 99
Exception
Mettre un point d'arrêt sur une exception qui est catch
: catch throw
.
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é…
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