Afficher la pageAnciennes révisionsLiens de retourHaut de page Cette page est en lecture seule. Vous pouvez afficher le texte source, mais ne pourrez pas le modifier. Contactez votre administrateur si vous pensez qu'il s'agit d'une erreur. ====== 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]] <code bash> print/x var # affiche en hexa print/t var # affiche en binaire </code> === 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]]) : <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]] <code bash> 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> ==== 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 ==== Le fichier doit être créé dans le dossier utilisateur et avoir les droits 600. === Créer des alias === <code> alias tare = target remote </code> === Sauvegarder l'historique === [[https://stackoverflow.com/questions/3176800/how-can-i-make-gdb-save-the-command-history|Source]] <code> 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> gdb.txt Dernière modification : 2025/03/05 12:16de phsw