Gdb imprime en archivo en lugar de stdout

Estoy ejecutando gdb y quiero examinar uno de esos desafortunados objetos de dios. Se necesitan muchas páginas (¡y tengo un monitor de 24 pulgadas girado hacia los lados!) Para verlo todo. Para facilitar el uso, me gustaría que gdb imprima el objeto en un archivo en lugar de la pantalla para que pueda abrirlo en vi y muévete con facilidad. Con toda la versatilidad de gdb, debe haber una forma de hacerlo, ¿no?

Necesita habilitar el registro.

(gdb) set logging on 

Puede decirle qué archivo usar.

 (gdb) set logging file my_god_object.log 

Y puede examinar la configuración de registro actual.

 (gdb) show logging 

Descubrí que puede redireccionar la salida de gdb a un archivo mediante el comando de run :

 (gdb) run > outfile 

Extendiendo la respuesta de @qubodup

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

el -ex ejecuta un comando gdb. Entonces, lo anterior carga el archivo central, ejecuta el comando bt y luego sale del comando. La salida se escribe en backtrace.log y también en la pantalla.

Otra invocación de gdb útil (que proporciona stacktrace con variables locales de todos los hilos) es

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

Es posible que desee guardar la salida de comandos gdb en un archivo. Hay varios comandos para controlar el registro de gdb.

 set logging on 

Habilitar el registro.

 set logging off 

Deshabilitar el registro.

 set logging file file 

Cambia el nombre del archivo de registro actual. El archivo de registro predeterminado es gdb.txt.

 set logging overwrite [on|off] 

Por defecto, gdb se agregará al archivo de registro. Configure la sobrescritura si desea configurar el inicio de sesión para sobrescribir el archivo de registro.

 set logging redirect [on|off] 

Por defecto, la salida de gdb irá a la terminal y al archivo de registro. Establezca la redirección si desea que la salida vaya solo al archivo de registro.

 show logging 

Muestra los valores actuales de la configuración de registro.

Un método simple para registrar gdb en un archivo sin dejar de ver el resultado (lo que facilita la escritura de comandos) es usar tee :

 gdb command |& tee gdb.log