L'obtention de gdb pour enregistrer une liste de points d'arrêt?
OK, info pause énumère les points d'arrêt, mais pas dans un format qui fonctionne bien avec les réutiliser à l'aide de l' --commande comme dans cette question. Ne gdb avoir une méthode pour les déverser dans un fichier acceptable pour l'entrée à nouveau? Parfois, dans une session de débogage, il est nécessaire de redémarrer gdb après la construction d'un ensemble de points d'arrêt pour les tests.
Edit: l' .gdbinit fichier a le même problème que --commande. L'info commande break ne fait pas de liste des commandes, mais plutôt d'une table pour la consommation humaine.
D'élaborer, en voici un échantillon, de l'info: pause
(gdb) info pause Num Type Disp Enb L'Adresse De Ce 1 point d'arrêt garder y 0x08048517 <foo::bar(void)+7>
Vous devez vous connecter pour publier un commentaire.
De gdb 7.2 vous pouvez maintenant utiliser la fonction enregistrement des points d'arrêt de commande.
Utilisation
source <filename>
à restaurer les sauvés points d'arrêt dans le fichier.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 la comment Y répondre dans gdb script et gdb: comment faire pour définir des points d'arrêt sur l'avenir des bibliothèques partagées avec un --indicateur de commandebreak g_log if log_level==G_LOG_LEVEL_CRITICAL
), puis au moins gdb 7.8.1 va arrêter l'analyse d'autres commandes. Si vous avez d'autres commandes qui doivent être exécutées pour le compte de ce point d'arrêt, mettre lecommands
ligne avant lacondition
ligne.Cette réponse est obsolète, gdb prend désormais en charge l'enregistrement direct. Voir cette réponse.
Vous pouvez utiliser la journalisation:
Le fichier breaks.txt contient maintenant:
L'écriture d'un script awk qui transforme le tout dans un format utile pour la
.gdbinit
ou un--command
fichier est facile. Ou vous pouvez même faire le script émettent séparé--eval-command
s'à la commande gdb ligne...L'ajout de cette petite macro .gdbinit vous aidera à le faire:
save breakpoints
de commande.Mettre votre gdb commandes et des points d'arrêt dans un .gdbinit fichier comme vous le feriez pour les taper à la gdb> invite, et gdb charge automatiquement et de les exécuter au démarrage. C'est un répertoire de fichiers, de sorte que vous pouvez avoir des fichiers différents pour les différents projets.
Une extension anon de l'extension de Johannes réponse:
Avec
brestore
vous pouvez alors restaurer les points d'arrêt enregistré avecbsave
.Extension de la réponse de Johannes: vous pouvez reformater automatiquement la sortie de
info break
dans un valide commande gdb fichier:Ensuite vous avez un valide commandfile dans
brestore.gdb
Cela a fonctionné pour moi, lorsque l'application est compilée avec
-g
.MODIFIER: testé avec succès avec gdb v6.8 sur Ubuntu Karmic.
Peut-être ceci:
http://sourceware.org/gdb/current/onlinedocs/gdb/Save-Breakpoints.html
mettre ce qui suit dans ~/.gdbinit de définir bsave et brestore gdb commandes pour sauvegarder et restaurer des points d'arrêt.
J'ai aussi ce message d'erreur/d'avertissement dans GDB lorsque vous essayez d'activer la journalisation dans le TUI mode, cependant l'enregistrement semble fonctionner en "non-TUI" mode. Je laisse donc le TUI mode chaque fois que je veux ouvrir une session quelque-chose. (Basculer d'avant en arrière dans le TUI mode avec CTRL-X, CTRL-A).
Voici comment je fonctionne:
set logging on
- maintenant, il ne devrait pas se plaindre.Espère que cette aide,
M:o)
Je sais que c'est un vieux thread mais Il est venu dans ma recherche google pour m'aider à le faire. Je suis nouveau sur gdb et trouvé l'ajout suivant à la réponse ci-dessus, utile pour sauvegarder/charger les points d'arrêt à un fichier spécifique.
Comme ci-dessus, ajoutez le code suivant dans le fichier ~/.gdbinit
Le problème est que la configuration d'un point d'arrêt est le contexte sensative.
Que faire si vous avez deux fonctions statiques nommé foo? Si vous êtes
déjà le débogage de l'un des modules qui définit foo, alors
gdb supposons que vous vouliez que l'on. Mais si vous venez de vidage
"pause " foo" dans un fichier, puis lire ce fichier au démarrage,
il ne sera pas clair de la fonction foo tu veux dire.
D'autres idées? J'ai
après
EDIT:
Je sais que la question est "comment faire pour enregistrer une liste de points d'arrêt", mais je viens de découvrir, que avec gdb on peut simplement définir "enregistré dans le fichier" points d'arrêt par
où breakpoints.txt est fichier comme ceci:
Je n'ai pas le mod points à répondre, mais ce que vous faites est de faire de vos points d'arrêt explicite, en spécifiant le fichier source et le numéro de ligne.
Si foo() est spécifiée dans les deux foo.c:42, et en bar.c:1337
Vous pouvez également spécifier une source de point d'arrêt qui ne se déclenchera que si le programme est en cours d'exécution sous gdb. Voir Comment détecter si le processus actuel est en cours d'exécution par GDB?