Gdb imprime dans un fichier au lieu de stdout


104

Je dirige gdb et je veux examiner l'un de ces objets dieux malheureux. Il faut beaucoup de pages (et j'ai un écran de 24 pouces tourné sur le côté!) Pour voir le tout. Pour plus de facilité, j'aimerais que gdb imprime l'objet dans un fichier au lieu de l'écran afin de pouvoir l'ouvrir dans vi et se déplacer avec facilité Avec toute la polyvalence de gdb, il doit y avoir un moyen de le faire, non?

Réponses:


151

Vous devez activer la journalisation.

(gdb) set logging on

Vous pouvez lui dire quel fichier utiliser.

(gdb) set logging file my_god_object.log

Et vous pouvez examiner la configuration de journalisation actuelle.

(gdb) show logging

15
Et si vous voulez que la sortie aille uniquement dans le fichier journal, utilisez set logging redirect on.
Ben C

5
Ne devrions-nous pas nous fixer set logging file my_god_object.logavant set logging on?
Herpes Free Engineer

Cet avantage tail -fet a awkété vraiment utile aujourd'hui. Merci!
remcycles

12

J'ai trouvé que vous pouvez rediriger la sortie de gdb vers un fichier via la runcommande:

(gdb) run > outfile

11
Ce serait la sortie du programme en cours de débogage, pas la sortie de gdb lui-même. OP voulait enregistrer la propre sortie de gdb.
le paul


@thepaul mais c'est en fait très utile car je débogue un programme QT qui supprime simplement le stdin de gdb avec ses ordures
QDebug

@ rostamn739 oups, n'a pas aidé du tout
rostamn739

12

Extension de la réponse de @ qubodup

gdb core.3599 -ex bt -ex quit |& tee backtrace.log

le -excommutateur exécute une commande gdb. Ainsi, ce qui précède charge le fichier principal, exécute la btcommande, puis la quitcommande. La sortie est écrite sur backtrace.loget également sur l'écran.

Un autre appel gdb utile (donnant stacktrace avec les variables locales de tous les threads) est

gdb core.3599 -ex 'thread apply all bt full' -ex quit

Sur certains systèmes, vous devez tapergdb -c core.3599 ...
user7610

1
> gdb core.3599 -ex 'thread apply all bt full' -ex quit Ajouter --batch pour exécuter sans invite -eg sudo gdb --batch core.3599 -ex 'thread apply all bt full' -ex quit> sortie .log
David Skelly

9

Depuis https://sourceware.org/gdb/onlinedocs/gdb/Logging-Output.html :

Vous souhaiterez peut-être enregistrer la sortie des commandes gdb dans un fichier. Il existe plusieurs commandes pour contrôler la journalisation de gdb.

set logging on

Activez la journalisation.

set logging off

Désactivez la journalisation.

set logging file file

Modifiez le nom du fichier journal actuel. Le fichier journal par défaut est gdb.txt.

set logging overwrite [on|off]

Par défaut, gdb s'ajoutera au fichier journal. Définissez le remplacement si vous souhaitez que la connexion remplace le fichier journal.

set logging redirect [on|off]

Par défaut, la sortie gdb ira à la fois au terminal et au fichier journal. Définissez la redirection si vous souhaitez que la sortie aille uniquement dans le fichier journal.

show logging

Afficher les valeurs actuelles des paramètres de journalisation.



5

Une méthode simple pour enregistrer gdb dans un fichier tout en affichant la sortie (ce qui facilite l'écriture des commandes) consiste à utiliser tee:

gdb command |& tee gdb.log

1

Bien qu'il y ait beaucoup de bonnes réponses ici, je dois encore poster la seule chose qui a fonctionné pour moi:

[niko@my-laptop]# gdb MyBinary 2>&1 log.txt

C'était le seul moyen d'obtenir gdb et la sortie binaire dans le même fichier log.txt, tout en le voyant également sur la console.

ÉDITER:

Attention: la sortie semble ne pas être partiellement synchronisée entre la sortie gdb et la sortie binaire. Quelqu'un peut-il confirmer? Vous voudrez peut-être vérifier si votre client telnet / ssh a une fonction pour enregistrer la sortie que vous voyez dans votre console.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.