OK, info break répertorie les points d'arrêt, mais pas dans un format qui fonctionnerait bien avec leur réutilisation en utilisant la commande - comme dans cette question . GDB a-t-il une méthode pour les transférer dans un fichier acceptable pour une nouvelle saisie? Parfois, dans une session de débogage, il est nécessaire de redémarrer GDB après avoir créé un ensemble de points d'arrêt pour les tests.
Le fichier .gdbinit a le même problème que --command. La commande info break ne répertorie pas les commandes, mais plutôt un tableau destiné à la consommation humaine.
Pour élaborer, voici un exemple de pause info :
(gdb) pause info Num Type Disp Enb Address Quoi 1 point d'arrêt garder y 0x08048517 <foo :: bar (void) +7>
Make breakpoint pending on future shared library load? (y or [n]) [answered N; input not from terminal]
set breakpoint pending on
comme décrit dans Comment répondre à Y dans le script gdb et gdb: comment définir des points d'arrêt sur les futures bibliothèques partagées avec un indicateurbreak g_log if log_level==G_LOG_LEVEL_CRITICAL
), au moins gdb 7.8.1 arrêtera d'analyser d'autres commandes. Si vous avez des commandes supplémentaires qui doivent être exécutées pour ce point d'arrêt, placez lacommands
ligne avant lacondition
ligne.Cette réponse est dépassée. GDB prend désormais en charge l'enregistrement direct. Voyez cette réponse .
Vous pouvez utiliser la journalisation:
Le fichier breaks.txt contient maintenant:
Il est facile d' écrire un script AWK qui le transforme en un format utile pour le
.gdbinit
ou un--command
fichier. Ou vous pouvez même faire émettre le script séparément--eval-command
de la ligne de commande GDB ...L'ajout de cette petite macro à .gdbinit vous aidera à le faire:
la source
save breakpoints
commande.Placez vos commandes et points d'arrêt GDB dans un fichier .gdbinit comme vous pourriez les saisir à l'
gdb>
invite, et GDB les chargera et les exécutera automatiquement au démarrage. Il s'agit d'un fichier par répertoire, vous pouvez donc avoir différents fichiers pour différents projets.la source
Une extension à l'extension d' Anon à la réponse de Johannes :
Avec,
brestore
vous pouvez ensuite restaurer les points d'arrêt enregistrés avecbsave
.la source
Extension à la réponse de Johannes : vous pouvez reformater automatiquement la sortie de
info break
dans un fichier de commande GDB valide:Ensuite, vous avez un fichier de commande valide dans
brestore.gdb
.Cela a fonctionné pour moi lorsque l'application est compilée avec
-g
.Je l'ai également testé avec succès avec GDB v6.8 sur Ubuntu 9.10 (Karmic Koala).
la source
Peut-être ceci:
save breakpoints [filename]
la source
Mettez ce qui suit dans ~ / .gdbinit pour définir bsave et brestore comme commandes GDB pour enregistrer et restaurer les points d'arrêt.
la source
J'obtiens également cette erreur / avertissement dans GDB lorsque j'essaye d'activer la journalisation en mode TUI . Cependant, la journalisation semble fonctionner en mode "non-TUI". Je quitte donc le mode TUI chaque fois que je veux enregistrer quelque chose. (Basculez d'avant en arrière en mode TUI avec Ctrl+X , Ctrl+A ).
Voici comment je travaille:
set logging on
- maintenant, il ne devrait pas se plaindre.la source
J'ai trouvé l'ajout suivant à une réponse précédente utile pour enregistrer / charger les points d'arrêt dans un fichier spécifique.
Comme dans la réponse précédente, ajoutez le code suivant au fichier ~ / .gdbinit
la source
Le problème est que la définition d'un point d'arrêt est sensible au contexte. Et si vous avez deux fonctions statiques nommées foo ?
Si vous déboguez déjà l'un des modules qui définit foo, alors GDB supposera que vous vouliez dire celui-là. Mais si vous videz simplement "break foo" dans un fichier et que vous lisez ensuite ce fichier au démarrage, la fonction foo que vous entendez ne sera pas claire .
la source
D'autres idées? j'ai
après
ÉDITER:
Je sais que cette question est "comment enregistrer une liste de points d'arrêt", mais je viens de découvrir qu'avec GDB nous pouvons simplement définir des points d'arrêt "enregistrés dans un fichier" en
où
breakpoints.txt
est un fichier comme celui-ci:la source