====== 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