A seta para cima do GDB não funciona

A seta para cima do GDB não funciona

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 ~/.xinputrcarquivo e $TERMestá 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.

informação relacionada