Guide de survie gdb

Voir aussi la GDB Quick Reference Card : https://sourceware.org/gdb/download/onlinedocs/refcard.pdf.gz

Pour ceux d'entre vous qui ont envie d'exploiter gdb au maximum de ses possibilités, allez voir à la fin de ce fichier !

Commandes générales

  • file toto : Ouvre le fichier exécutable toto dans gdb
  • target remote :3333 : Sélectionne la sonde JTAG comme cible d'exécution (plus précisément OpenOCD qui écoute sur le port TCP 3333)
  • load : Charge le programme sur la cible (via JTAG). Si le fichier ELF contient un point d'entrée, gdb y positionne automatiquement le PC.
  • run : Débute l'exécution du programme
  • mon blablabla : envoie la commande blablabla au driver de sonde JTAG

Contrôle de l'exécution

  • continue // c : Continue l'exécution jusqu'au prochain point d'arrêt
  • step // s : Continue jusqu'à ce qu'une autre ligne de code C soit atteinte
  • stepi // si : Continue jusqu'à la prochaine instruction machine

Points d'arrêts (Breakpoints)

  • break [file:]line // b [file:]line : Définit un point d'arrêt à la ligne line du fichier file
  • break [file:]func : Définit un point d'arrêt à l'entrée de la fonction func du fichier file
  • break *addr : Définit un point d'arrêt à l'adresse addr
  • info break : Affiche la liste des points d'arrêts
  • clear [file:]line : Supprime le point d'arrêt
  • clear [file:]func : Supprime le point d'arrêt
  • delete : Supprime tous les points d'arrêt

 Examen des registres / mémoire

  • info registers // i r : Affiche l'état des registres
  • print // p : Affiche la valeur d'une variable ou d'un registre. Les registres doivent être précédés par $
    • p $r0 : Affiche le contenu de r0
    • p/x $pc : Affiche le contenu du pc en hexadecimal (/x = Hexa, /d = Décimal signé, /u = Décimal non signé, /t = Binaire)
  • x [/Nuf] expr : Affiche le contenu de la mémoire à l'adresse expr
    • N = Nombre d'éléments à afficher
    • u = Taille des éléments (b = Bytes, h = Half words (16 bits), w = Words (32 bits), g = Giant words (64 bits)
    • f = Format (x = Hexa, d = Décimal signé, u = Décimal non signé, t = Binaire...)
    • l'expression peut être un registre. Par exemple, pour afficher des 8 derniers éléments de la pile : x/8 $sp
  • list : Affiche le code source autour de l'instruction en cours
  • disass addr : Affiche le contenu de la mémoire à l'adresse addr sous forme d'instructions
  • display : Comme print mais affiche la valeur après chaque arrêt du programme

Layout

  • layout split : affiche l'affichage en deux zones, l'une de commandes, l'autre de code et/ou registres
  • layout asm : en mode split, affiche le code assembleur dans la fenêtre du haut
  • layout regs : en mode split, affiche les registres dans la fenêtre du haut
  • focus cmd : donne le focus à la zone de commandes gdb

Astuce:

  • enter : réexecute la dernière commande

Références

Un .gdbinit intéressant pour nos TP :

target ext :2331
mon endian little
mon halt

# User interface with asm, regs and cmd windows
define split
  layout split
  layout asm
  layout regs
  focus cmd
end

 

Mastering gdb