====== GDB ======
==== 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]]
print/x var # affiche en hexa
print/t var # affiche en binaire
=== Chaînes de caractères en C++ ===
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]]) :
print *(char**)0x7fffffffda88
==== 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]]
ignore
=== 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]]) :
rbreak ^pthread_
==== 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]]) :
gdb --args ./foo bar
==== Lancer automatiquement le programme ====
[[https://stackoverflow.com/questions/2119564/how-to-automatically-run-the-executable-in-gdb|Source]]
gdb -ex run ./a.out
==== Attacher GDB à un processus en cours ====
[[https://stackoverflow.com/questions/2308653/can-i-use-gdb-to-debug-a-running-process|Source]]
gdb -p
gdb
==== 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:
show follow-fork-mode
Pour définir le mode:
set follow-fork-mode mode
==== Fichier .gdbinit ====
Le fichier doit être créé dans le dossier utilisateur et avoir les droits 600.
=== Créer des alias ===
alias tare = target remote
=== Sauvegarder l'historique ===
[[https://stackoverflow.com/questions/3176800/how-can-i-make-gdb-save-the-command-history|Source]]
set history save on
==== 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]]) :
objdump --syms $fichier
==== Générer un core dump ====
Depuis GDB :
generate-core-file [/chemin/vers/le/core.foo]
Sans ouvrir GDB :
gcore $pid