gdb

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
gdb [2021/06/03 21:22] – [Afficher les valeurs des variables dans une autre base] remove dead link phswgdb [2025/03/05 12:16] (Version actuelle) – Add how to generate a core dump phsw
Ligne 2: Ligne 2:
  
  
-==== Afficher les valeurs des variables dans une autre base ====+==== Commandes ==== 
 + 
 +  * ''l'' liste le code, ''l -'' liste le code précédent 
 +  * ''info break'' : affiche les infos sur les breakpoints 
 +  * ''info locals'' : pour voir toutes les variables existantes dans le contexte actuel et leurs valeurs 
 +  * ''disable n'' : désactive le breakpoint ''n'' 
 +  * ''thread apply all bt'' : affiche la backtrace de tous les threads 
 +  * ''save breakpoints filename'' pour sauvegarder les breakpoints, puis ''source filename'' pour les restaurer 
 +  * ''dprintf 16,"current value %d\n",i'' : à chaque passage à la ligne 16, ajoute le ''printf'' correspondant 
 + 
 + 
 +==== Affichages ==== 
 + 
 +=== Afficher les valeurs des variables dans une autre base ===
  
 [[https://stackoverflow.com/questions/9671820/print-variables-in-hexadecimal-or-decimal-format|Source]] [[https://stackoverflow.com/questions/9671820/print-variables-in-hexadecimal-or-decimal-format|Source]]
Ligne 12: Ligne 25:
  
  
---------------------------- +=== Chaînes de caractères en C++ === 
-==== Activer un breakpoint seulement après un certain nombre de passages ====+ 
 +Afficher le contenu de la chaîne de caractères de type ''std::string'' en C++ ([[https://stackoverflow.com/questions/6776961/how-to-inspect-stdstring-in-gdb-with-no-source-code|source]]) : 
 +<code> 
 +print *(char**)0x7fffffffda88 
 +</code> 
 + 
 + 
 + 
 + 
 +==== Breakpoints ==== 
 + 
 +=== Activer un breakpoint seulement après un certain nombre de passages ===
  
 [[https://stackoverflow.com/questions/2956889/how-to-make-a-gdb-breakpoint-only-break-after-the-point-is-reached-a-given-numbe|Source]] [[https://stackoverflow.com/questions/2956889/how-to-make-a-gdb-breakpoint-only-break-after-the-point-is-reached-a-given-numbe|Source]]
Ligne 19: Ligne 43:
 <code bash> <code bash>
 ignore <br-id> <nombre de fois à ignorer> ignore <br-id> <nombre de fois à ignorer>
 +</code>
 +
 +=== Poser un point d'arrêt sur toutes les fonctions validant une regex ===
 +
 +Par exemple toutes les fonctions qui ont un préfixe donné ([[https://stackoverflow.com/questions/24614062/how-do-i-break-on-all-functions-that-matches-a-pattern|source]]) :
 +<code>
 +rbreak ^pthread_
 +</code>
 +
 +
 +
 +==== Indiquer les paramètres du programme ====
 +
 +Directement à l'invocation de GDB ([[https://stackoverflow.com/questions/6121094/how-do-i-run-a-program-with-commandline-arguments-using-gdb-within-a-bash-script|source]]) :
 +<code bash>
 +gdb --args ./foo bar
 +</code>
 +
 +
 +==== Lancer automatiquement le programme ====
 +
 +[[https://stackoverflow.com/questions/2119564/how-to-automatically-run-the-executable-in-gdb|Source]]
 +
 +<code bash>
 +gdb -ex run ./a.out
 </code> </code>
  
Ligne 24: Ligne 73:
  
  
------------ 
 ==== Attacher GDB à un processus en cours ==== ==== Attacher GDB à un processus en cours ====
  
Ligne 35: Ligne 83:
  
  
---------------------------+ 
 +==== Suivre les forks ==== 
 + 
 +[[https://sourceware.org/gdb/onlinedocs/gdb/Forks.html|Source]] 
 + 
 +GDB dispose de deux modes: 
 +  * ''parent'': GDB continue à debugguer le processus père 
 +  * ''child'': GDB continue à debugguer le processus fils 
 + 
 +Pour connaître le mode courant: 
 +<code bash> 
 +show follow-fork-mode 
 +</code> 
 + 
 +Pour définir le mode: 
 +<code bash> 
 +set follow-fork-mode mode 
 +</code> 
 + 
 + 
 ==== Fichier .gdbinit ==== ==== Fichier .gdbinit ====
  
Ligne 51: Ligne 119:
 <code> <code>
 set history save on set history save on
 +</code>
 +
 +
 +
 +==== S'assurer que les symboles de debug existent ====
 +
 +La ligne suivante doit renvoyer quelque chose (on peut éventuellement greper ''debug'' ; [[https://stackoverflow.com/questions/3284112/how-to-check-if-program-was-compiled-with-debug-symbols|source]]) :
 +<code bash>
 +objdump --syms $fichier
 +</code>
 +
 +
 +==== Générer un core dump ====
 +
 +Depuis GDB :
 +<code>
 +generate-core-file [/chemin/vers/le/core.foo]
 +</code>
 +
 +Sans ouvrir GDB :
 +<code bash>
 +gcore $pid
 </code> </code>
  • gdb.1622748170.txt.gz
  • Dernière modification : 2021/06/03 21:22
  • de phsw