La flecha hacia arriba de GDB no funciona

La flecha hacia arriba de GDB no funciona

Busqué mucho sobre problemas similares pero no encontré nada. Cuando ejecutaba gdb no podía usar la flecha hacia arriba para recorrer los comandos anteriores. Las flechas hacia arriba y hacia abajo simplemente se ignoran. Comencé a observar este comportamiento después de cambiar algunas configuraciones, pero no recuerdo qué configuraciones se cambiaron exactamente.

No tengo ningún ~/.xinputrcarchivo y $TERMestá configurado en xterm.

Respuesta1

Podría deberse a que el tamaño de su historial es 0.

Puede verificar el tamaño de su historial de gdb:

(gdb) show history size
The size of the command history is 0.
(gdb) 

Si elel tamaño máximo del historial es 0, entoncesflecha arribaPor supuesto, no funciona porque no se pudo guardar el historial.

La razón principal que encontré es porque la variable de entorno de bash HISTSIZE es 0 o está vacía. Es frustrante porque penséTAMAÑOHIST=(valor vacíoa la derecha) en ~/.bashrc puede guardar el historial de bashentradas ilimitadas, peroel efecto secundario es que gdb consulte $HISTSIZE y luego establezca el tamaño del historial de gdb en 0al iniciar gdb.

Entonces puedes ponerHISTSIZE=10000000en tu ~/.bashrc y la flecha hacia arriba debería funcionar ahora (ADVERTIR: haga una copia de seguridad de su ~/.bash_historyantes de jugar con HISTSIZE):

(gdb) show history size 
The size of the command history is 10000000.
(gdb) 

Si insistes en mantenerTAMAÑOHIST=vacío en ~/.bashrc, entonces la opción es crear esta función en ~/.bashrc:

gdb() ( HISTSIZE=70000000; /usr/bin/gdb "$@"; )

. ~/.bashrcpara recargar, ahora cambió:

(gdb) show history size 
The size of the command history is 70000000.
(gdb) 

Después de salir de gdb, el $HISTSIZE original no será anulado (es decir, permanece vacío como ilimitado) porque nuestra función gdb usa subshell, es decir, entre paréntesis, gdb() (...):

$ echo $HISTSIZE

$ 

También debe activar el historial al salir y luego pensar dónde almacenar el archivo del historial. El siguiente es mi archivo ~/.gdbinit, créelo si aún no existe:

$ cat ~/.gdbinit 
set environment HISTSIZE 10000000
set history filename ~/.gdb_history
set history save on
set history size 10000000
set history expansion on
show history

$ 

Podrías preguntar por quéestablecer entorno HISTSIZE 10000000no funciona? Es porque solo afecta al programa, no al gdb en sí, como se indica en la páginahttp://www.delorie.com/gnu/docs/gdb/gdb_20.html:

Establezca la variable de entorno varname en valor. El valor cambia sólo para su programa, no para GDB en sí.

El parche ya está disponible, consultehttps://sourceware.org/bugzilla/show_bug.cgi?id=16999:

2015-06-17 18:14:09UTC:

... Este parche hace que el comportamiento de GDBHISTSIZE no válido sea consistente con cómo bash maneja HISTSIZE. Cuando encontramos un GDBHISTSIZE nulo o fuera de rango (fuera de [0, INT_MAX]), ahora configuramos el tamaño del historial en ilimitado en lugar de 0. Cuando encontramos un GDBHISTSIZE no numérico, no hacemos nada.

2015-06-17 18:30:10UTC:

La próxima versión de GDB ya no leerá HISTSIZE porque hacerlo causa más problemas de los que resuelve. En cambio, se lee GDBHISTSIZE con el mismo propósito. Y, en buena medida, el comportamiento de GDBHISTSIZE coincidirá con la forma en que bash lee HISTSIZE, por lo que configurar GDBHISTSIZE en -1 hará que el tamaño del historial de GDB sea ilimitado.

información relacionada