
Pesquisei muito sobre problemas semelhantes, mas não encontrei nada. Ao executar o gdb, não consegui usar a seta para cima para percorrer os comandos anteriores. As setas para cima e para baixo são simplesmente ignoradas. Comecei a observar esse comportamento após alterar algumas configurações, mas não me lembro exatamente quais configurações foram alteradas.
Não tenho nenhum ~/.xinputrc
arquivo e $TERM
está definido como xterm
.
Responder1
Pode ser que o tamanho do seu histórico seja 0.
Você pode verificar o tamanho do histórico do gdb:
(gdb) show history size
The size of the command history is 0.
(gdb)
Se oo tamanho máximo do histórico é 0, entãoseta para cimaé claro que não está funcionando porque nenhum histórico pôde ser salvo.
O principal motivo que encontrei é porque a variável de ambiente bash HISTSIZE é 0 ou está vazia. É frustrante porque penseiTAMANHO HISTÓRICO=(valor vazioà direita) em ~/.bashrc pode salvar o histórico do bashentradas ilimitadas, maso efeito colateral é gdb, consulte $HISTSIZE e defina o tamanho do histórico do gdb como 0na inicialização do gdb.
Então você pode colocarTAMANHO HISTÓRICO=10000000no seu ~/.bashrc e a seta para cima deve funcionar agora (AVISAR: faça backup do seu ~/.bash_historyantes de brincar com HISTSIZE):
(gdb) show history size
The size of the command history is 10000000.
(gdb)
Se você insiste em manterTAMANHO HISTÓRICO=vazio em ~/.bashrc, então a opção é criar esta função em ~/.bashrc:
gdb() ( HISTSIZE=70000000; /usr/bin/gdb "$@"; )
. ~/.bashrcpara recarregar, agora mudou:
(gdb) show history size
The size of the command history is 70000000.
(gdb)
Após sair do gdb, o $HISTSIZE original não será substituído (ou seja, permanecerá vazio como ilimitado) porque nossa função gdb usa subshell, ou seja, entre parênteses, gdb() (...):
$ echo $HISTSIZE
$
Você também precisa ativar o histórico ao sair e pensar onde armazenar o arquivo de histórico. A seguir está meu arquivo ~/.gdbinit, crie-o se ainda não existir:
$ 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
$
Você pode perguntar por quedefinir ambiente HISTSIZE 10000000não funciona? É porque afeta apenas o programa, não o próprio gdb, conforme indicado na páginahttp://www.delorie.com/gnu/docs/gdb/gdb_20.html:
Defina a variável de ambiente varname como valor. O valor muda apenas para o seu programa, não para o próprio GDB.
Patch já está disponível, vejahttps://sourceware.org/bugzilla/show_bug.cgi?id=16999:
17/06/2015 18:14:09 UTC:
... Este patch torna o comportamento de GDBHISTSIZE inválido consistente com a forma como o bash lida com HISTSIZE. Quando encontramos um GDBHISTSIZE nulo ou fora do intervalo (fora de [0, INT_MAX]), agora definimos o tamanho do histórico como ilimitado em vez de 0. Quando encontramos um GDBHISTSIZE não numérico, não fazemos nada.
17/06/2015 18:30:10 UTC:
A próxima versão do GDB não lerá mais HISTSIZE porque isso causa mais problemas do que resolve. Em vez disso, GDBHISTSIZE é lido para a mesma finalidade. E para garantir, o comportamento de GDBHISTSIZE corresponderá à forma como o bash lê HISTSIZE, portanto, definir GDBHISTSIZE como -1 fará com que o tamanho do histórico do GDB seja ilimitado.