Gdb stampa su file invece di stdout

Sto eseguendo gdb e voglio esaminare uno di quegli sfortunati oggetti divini. Ci vogliono molte pagine (e ho un monitor da 24 “girato di lato!) Per vedere tutto. Per facilità d’uso, mi piacerebbe che gdb stampasse l’object su un file invece che sullo schermo in modo che io possa aprirlo in vi e andare in giro con facilità.Tutta la versatilità di gdb, ci deve essere un modo per farlo, giusto?

È necessario abilitare la registrazione.

(gdb) set logging on 

Puoi dire quale file usare.

 (gdb) set logging file my_god_object.log 

Ed è ansible esaminare la configurazione di registrazione corrente.

 (gdb) show logging 

Ho scoperto che puoi redirect l’output da gdb a un file tramite il comando run :

 (gdb) run > outfile 

Prolungamento della risposta di @ qubodup

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

l’ -ex esegue un comando gdb. Quindi il precedente carica il file core, esegue il comando bt , quindi quit comando. L’output è scritto su backtrace.log e anche sullo schermo.

Un’altra utile chiamata gdb (che dà stacktrace con variabili locali da tutti i thread) è

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

Potresti voler salvare l’output dei comandi gdb in un file. Ci sono diversi comandi per controllare la registrazione di gdb.

 set logging on 

Abilita la registrazione.

 set logging off 

Disabilita la registrazione.

 set logging file file 

Cambia il nome del file di registro corrente. Il file di registro predefinito è gdb.txt.

 set logging overwrite [on|off] 

Per impostazione predefinita, gdb verrà aggiunto al file di registro. Impostare la sovrascrittura se si desidera impostare la registrazione per sovrascrivere il file di registro.

 set logging redirect [on|off] 

Di default, l’output di gdb andrà sia al terminale che al file di log. Imposta reindirizzamento se vuoi che l’output passi solo al file di registro.

 show logging 

Mostra i valori correnti delle impostazioni di registrazione.

Un semplice metodo per registrare gdb su un file mentre si sta ancora vedendo l’output (che facilita i comandi di scrittura) è usare il tee :

 gdb command |& tee gdb.log