[[https://www.youtube.com/watch?v=PorfLSr3DDI|Inspiration]] =====Lancement===== * Soit les paramètres de l'application (facultatif, on peut de faire une fois GDB lancé) : gdb --args program args * Soit le dump à analyser : gdb program dump gdb -c dump =====Options===== ====Par défaut==== Ajouter dans le fichier ''$HOME/.gdbinit'' les commandes à exécuter au démarrage. Par exemple ''set height 0''. ====Description==== Ne plus avoir de points d'arrêt quand l'affichage d'une donnée prend plus que la taille de l'écran (''bt'' ou ''display'' notamment). =====Points d'arrêt===== * La liste info breakpoints info watchpoints * Les enlever clear delete n * Les désactiver Certaines applications génèrent beaucoup d'exceptions. handle SIGSEGV nostop noprint pass * Suivre les enfants / fork set follow-fork-mode child ====Conditions==== b Message.cpp:112 if i == 99 ====Exception==== Mettre un point d'arrêt sur une exception qui est ''catch'' : ''catch throw''. =====Démarrer le débogage===== Avec un point d'arrêt sur le main : start Sans point d'arrêt initial : run =====Une fois arrêté===== ====La pile==== * Seulement la hiérarchie des fonctions bt * Avec les variables locales bt full ====Afficher le code==== * Afficher plus que la seule ligne en cours list * Activer l'interface graphique (TUI) CTRL+X + CTRL+A * Rafraîchir l'interface graphique (peut être nécessaire si un printf est exécuté dans le programme) CTRL+L * Multi fenêtre CTRL+X + 2 Répéter de fois autant de nécessaire pour avoir la combinaison de fenêtre : code C / code assembleur, code assembleur / registres, registres / code C. Pour modifier le contenu de la fenêtre des registres, il faut faire ''tui reg XXX'' avec XXX : ''general'' / ''float'' / ''system'' / ''vector'' / ''all''. * Touches haut et bas Avant les touches haut et bas permettaient de faire défiler les commandes précédentes / suivantes. En mode TUI, haut et bas font défiler la fenêtre en cours. Il faut utiliser ''CTRL+P'' et ''CTRL+N''. #Simplicité… =====Naviguer dans le débogage===== * Avancer d'une ligne de code sans entrer dans une éventuelle sous-fonction next * Avancer d'une ligne de code en entrant dans une éventuelle sous-fonction step * Reprendre le cours de l'application continue =====Scripts===== * Relancer l'application en boucle Utile si le plantage d'un programme est aléatoire Mettre un point d'arrêt sur le début du ''main'' (id 1) et sur la fin (id 2). Taper : command 1 record continue end command 2 run end =====Bugs===== ====decode_line_full: Assertion `state->canonical_names[i].suffix != NULL' failed.==== Il faut supprimer tous les ''breakpoints'' / ''watchpoints''. Trouvé depuis LPCXpresso pour ARM. [[https://mcuoneclipse.com/2014/10/11/failed-to-debug-with-gdb-breakpoints-or-expressions-on-non-existing-locations/|Failed to Debug with GDB: Breakpoints or Expressions on non-existing Locations | MCU on Eclipse]] {{ :prog:gdb:failed_to_debug_with_gdb_breakpoints_or_expressions_on_non-existing_locations_mcu_on_eclipse_2020-01-07_11_27_12_am_.html |Archive du 11/10/2014 le 07/01/2020}} N'existe plus depuis la version v4.9 ([[https://bugs.launchpad.net/gcc-arm-embedded/+bug/1380026|Bug #1380026 “Internal GDB failure and crash for breakpoint with...” Bugs GNU ARM Embedded Toolchain]] {{ :prog:gdb:bug_1380026_internal_gdb_failure_and_crash_for_breakpoint_with..._bugs_gnu_arm_embedded_toolchain_2020-01-07_11_27_21_am_.html |Archive du 11/10/2014 le 07/01/2020}}