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 [2019/04/11 09:27] – add .gdbinit file (alias and save history) 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 ====
  
-[[https://stackoverflow.com/questions/9671820/print-variables-in-hexadecimal-or-decimal-format|Source]], [[http://www.delorie.com/gnu/docs/gdb/gdb_55.html|plus de détails]]...+  * ''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]]
  
 <code bash> <code bash>
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 20: Ligne 44:
 ignore <br-id> <nombre de fois à ignorer> ignore <br-id> <nombre de fois à ignorer>
 </code> </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>
 +
 +
 +
 +
 +==== Attacher GDB à un processus en cours ====
 +
 +[[https://stackoverflow.com/questions/2308653/can-i-use-gdb-to-debug-a-running-process|Source]]
 +
 +<code bash>
 +gdb -p <pid>
 +gdb <programme> <pid>
 +</code>
 +
 +
 +
 +==== 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 38: 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.1554967620.txt.gz
  • Dernière modification : 2021/04/04 17:01
  • (modification externe)