GDB seta para cima não funciona

3

Eu procurei muito sobre problemas semelhantes, mas não encontrei nada. Ao executar o gdb, não consegui usar a seta para percorrer os comandos anteriores. Setas para cima e para baixo são apenas ignoradas. Comecei a observar esse comportamento após a alteração de algumas configurações, mas não lembro quais configurações foram alteradas com exatidão.

Não tenho o arquivo ~/.xinputrc e $TERM está definido como xterm .

    
por eXXXXXXXXXXX2 18.10.2014 / 08:22

1 resposta

7

Pode ser que o tamanho do seu histórico seja 0.

Você pode verificar o tamanho do seu histórico do gdb:

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

Se o tamanho máximo do histórico for 0 , então a para cima não funcionará, pois nenhum histórico pode ser salvo.

A principal razão que encontrei é porque a variável de ambiente bash HISTSIZE é 0 ou vazia. É frustrante porque eu pensei HISTSIZE = ( valor vazio à direita) em ~ / .bashrc pode fazer histórico de bash salvo entradas ilimitadas , mas < strong> o efeito colateral é gdb, consulte $ HISTSIZE e, em seguida, defina o tamanho do histórico do gdb como 0 na inicialização do gdb.

Então você pode colocar HISTSIZE = 10000000 no seu ~ / .bashrc e a seta para cima deve funcionar agora ( WARN: backup do seu ~ / .bash_history antes de brincar com HISTSIZE):

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

Se você insistir em manter HISTSIZE = vazio em ~ / .bashrc, então a opção é criar esta função em ~ / .bashrc:

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

~ / .bashrc para recarregar, agora mudou:

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

Depois de 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, em seguida, pensar onde armazenar o arquivo de histórico. O seguinte é 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 que definir o ambiente HISTSIZE 10000000 não funciona? É porque isso afeta somente o programa, e não o próprio gdb, como indicado na página link :

Set environment variable varname to value. The value changes for your program only, not for GDB itself.

O patch está disponível agora, veja o link :

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

... This patch makes the behavior of invalid GDBHISTSIZE consistent with how bash handles HISTSIZE. When we encounter a null or out-of-range GDBHISTSIZE (outside of [0, INT_MAX]) we now set the history size to unlimited instead of 0. When we encounter a non-numeric GDBHISTSIZE we do nothing.

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

The next version of GDB will no longer read HISTSIZE at all because doing so causes more problems than it solves. Instead GDBHISTSIZE is read for the same purpose. And for good measure, the behavior of GDBHISTSIZE will match how bash reads HISTSIZE, so setting GDBHISTSIZE to -1 will cause GDB's history size to be unlimited.

    
por 02.07.2015 / 19:39

Tags