Gdb trae su propio sistema de logs y lo podemos activar de la siguiente manera:
set logging on
Esto crea un archivo llamado gdb.txt en el directorio donde lanzamos gdb, estoy guarda todo lo que se imprime en pantalla.
Cambiar el nombre del archivo.
Para cambiar el nombre del archivo se hace de la siguiente manera
set logging file compare.log
Para que nuestro gdb comience a guardar logs
set logging on
Y para que deje de hacerlo
set logging off
Modo Append
Esto sirve para sesiones largas
set logging overwrite off
Hace que nuestro archivo de logs no se sobre escriba.
Flujo real
set logging file compare.log
set logging overwrite off
set logging on
break main
run
info registers
x/16x $rsp
bt
set logging off
Ejemplo real de un log
Breakpoint 1 at 0x1168: file compare.c, line 7.
Starting program: /home/student/workspace/chapter01/compare
warning: Error disabling address space randomization: Operation not permitted
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Breakpoint 1, main () at compare.c:7
7 printf("a: %s\n", a);
Stack level 0, frame at 0x7ffc8a3390c0:
rip = 0x570f3c46d168 in main (compare.c:7); saved rip = 0x7009151c5ca8
source language c.
Arglist at 0x7ffc8a3390b0, args:
Locals at 0x7ffc8a3390b0, Previous frame's sp is 0x7ffc8a3390c0
Saved registers:
rbp at 0x7ffc8a3390b0, rip at 0x7ffc8a3390b8
8 printf("p: %s\n", p);
10 return 0;
a = "Hola, memoria"
p = 0x570f3c46e004 "Hola, memoria"
Truco avanzado
Se puede activar y desactivar los logs en caliente
set logging on
x/32gx $rsp
set logging off