Quels sont les meilleurs moyens pour automatiser un GDB session de débogage?
Ne GDB est intégré dans le script mécanisme, dois-je code un script expect, ou est-il une solution encore meilleure là-bas?
Je vais envoyer la même séquence de commandes à chaque fois et je vais sauver la sortie de chaque commande dans un fichier (le plus souvent à l'aide de GDB est intégré dans le mécanisme de journalisation, sauf si quelqu'un a une meilleure idée).
- Sous-ensemble: stackoverflow.com/questions/13935443/...
Vous devez vous connecter pour publier un commentaire.
gdb
exécute le fichier.gdbinit
après l'exécution.De sorte que vous pouvez ajouter vos commandes à ce fichier et voir si il est OK pour vous.
Ceci est un exemple de
.gdbinit
pour imprimer la trace de tous lesf()
appels:J'allais juste par quelque chose de similaire, et est venu avec un exemple de base - et en sachant que je vais oublier très vite, j'ai pensé que je ferais mieux de poster
:)
Donc je vais le poster ici, car il ressemble trait à la question.En gros, dans cet exemple, je voulais obtenir quelques valeurs de variables dans des endroits en particulier, du code; et leur production jusqu'à ce que le programme se bloque. Donc, ici, est d'abord un petit programme qui est garantie de crash en quelques étapes,
test.c
:La seule raison pour laquelle le programme accepte les arguments de ligne de commande est d'être en mesure de choisir le nombre d'étapes avant de s'écraser et de montrer que
gdb
ignore--args
en mode batch. Ce que je compile avec:Ensuite, je prépare le script suivant - l'astuce ici est d'attribuer un
command
à chaquebreakpoint
, qui finira parcontinue
(voir aussi Automatiser gdb: afficher le backtrace à chaque appel de fonction met). Ce script je l'appelletest.gdb
:Noter que, si vous avez l'intention de l'utiliser en mode batch, vous devez "start up" le script à la fin, avec
run
oustart
ou quelque chose de similaire.Avec ce script en place, je peux appeler
gdb
en mode batch - qui produira la sortie suivante dans le terminal:Note que bien que nous spécifier l'argument de ligne de commande 5, la boucle a toujours tourne à seulement deux fois (comme c'est la spécification de
run
dans legdb
script); sirun
n'ont pas d'arguments, elle fait tourner qu'une seule fois (la valeur par défaut du programme) confirmant que--args ./test.exe 5
est ignoré.Cependant, puisque maintenant c'est la sortie en un seul appel, et sans aucune interaction de l'utilisateur, la sortie de ligne de commande peut être facilement capturés dans un fichier texte à l'aide
bash
redirection, dire:Il est aussi un exemple de l'utilisation de python pour automatiser gdb dans c - GDB automatique pas à pas - impression automatique des lignes, tandis que le free-running?
Espère que cette aide,
Cheers!
detach
danscommand
faitgdb
crash,continue
danscoammand
résultats étrangesSelected thread is running.
alertes.Si un -x avec un fichier est trop pour vous, il suffit d'utiliser plusieurs ex. C'est un exemple à suivre l'exécution d'un programme montrant (et l'enregistrement) de la trace sur les accidents de