¿Cómo puedo hacer que gdb guarde el historial de comandos?

195

¿Cómo puedo configurar gdbpara que guarde el historial de comandos? Al comenzar una nueva gdbsesión, me gustaría usar las teclas de flecha hacia arriba para acceder a los comandos de las sesiones anteriores.

Franco
fuente
1
Nota: El .gdbinitarchivo debe estar protegido contra escritura por otros que no sean usted en Linux.
urzeit
@urzeit: creo que es una causa perdida en distribuciones como Ubuntu. Permiten que cualquier persona entre al directorio de inicio de otra persona de manera predeterminada.
jww
@jww El .gdbinitarchivo no se procesa si los permisos no están configurados correctamente, sin importar cuál sea el valor predeterminado o qué otras limitaciones en los directorios principales utiliza el sistema.
urzeit
@urzeit Si crea un .gdbinitarchivo y ese no es el caso, significa umaskque no está configurado en un valor razonable como 022. Luego, en un sistema multiusuario, tiene problemas más grandes que solo su .gdbinitarchivo.
Kaz

Respuestas:

283

Respuesta corta: echo 'set history save on' >> ~/.gdbinit && chmod 600 ~/.gdbinit


Respuesta larga:

El historial de comandos está cubierto en el manual GDB, 22.3 Historial de comandos . Cree un archivo $HOME/.gdbinit, cambie sus permisos 0600y agregue el siguiente contenido:

set history save on

Puede establecer el número de comandos pasados ​​guardados con lo siguiente. El comando se describe como "Establecer el número de comandos que gdb mantiene en su lista de historial. Esto se establece de manera predeterminada en el valor de la variable de entorno GDBHISTSIZE, o en 256 si esta variable no está establecida. Los valores no numéricos de GDBHISTSIZE se ignoran. Si el tamaño es ilimitado o si GDBHISTSIZE es un número negativo o la cadena vacía, entonces el número de comandos que gdb mantiene en la lista del historial es ilimitado " .

set history size <size>

Un comando relacionado es set history remove-duplicates <count>. El comando se describe como "Controlar la eliminación de entradas duplicadas del historial en la lista del historial de comandos. Si el recuento no es cero, gdb mirará hacia atrás en las últimas entradas del historial de recuento y eliminará la primera entrada que sea un duplicado de la entrada actual agregado a la lista del historial de comandos. Si el recuento es ilimitado, este retrospectivo no tiene límites. Si el recuento es 0, la eliminación de las entradas duplicadas del historial está deshabilitada " .

set history remove-duplicates <count>

Por defecto, gdb guarda el historial en el archivo ./.gdb_history en el directorio actual . Si desea que su historial de comandos no dependa del directorio en el que se encuentra, incluya también:

set history filename ~/.gdb_history
jww
fuente
44
Acabo de descubrir esto por mí mismo y pensé en compartirlo en SO.
Frank
3
Para la próxima vez, es perfectamente legítimo crear preguntas con respuesta propia como wiki no comunitario. :)
Greg Hewgill
@Frank ¿Qué tal si escribo y luego presiono la ntecla de flecha hacia arriba, obtengo todos los comandos anteriores que comienzan con n.
SIFE
En GDB 8.0.1 esto parece funcionar sin los permisos especiales de archivo.
Ryan1729
7

Si todavía tiene problemas, asegúrese de que su variable de entorno HISTSIZE sea un número alto adecuado. La mía estaba vacía, lo que provocaba que la configuración de "tamaño de historial" de gdb fuera 0.

Adicional

export HISTSIZE=100000000

a mi ~ / .bashrc y todo está bien

Puede verificar la configuración del historial de gdb haciendo (dentro de gdb) "show history":

gdb$ show history
expansion:  History expansion on command input is off.
filename:  The filename in which to record the command history is "/home/xiao/.gdb_history".
save:  Saving of the history record on exit is on.
size:  The size of the command history is 100000000.

De los documentos :

establecer tamaño de historial tamaño
establecer tamaño de historial ilimitado
Establezca el número de comandos que GDB mantiene en su lista de historial. Este valor predeterminado es el valor de la variable de entorno HISTSIZE, o 256 si esta variable no está configurada. Si el tamaño es ilimitado, el número de comandos que GDB mantiene en la lista del historial es ilimitado.

Xiao
fuente
Yo tuve el mismo problema. A pesar set history size 100de incluir el archivo .gdbinit, la variable de entorno HISTSIZE todavía causaba que el tamaño del historial se estableciera en cero. El problema es que gdb no entiende que HISTSIZE se puede establecer en ilimitado
DavidW
El error HISTSIZE en gdb se ha solucionado a partir de junio de 2015 , no es probable que este cambio esté presente en su sistema todavía. Mientras tanto, si HISTSIZEestá configurado debe ser> 0, o gdb deshabilitará el historial.
Nate R.