Como posso fazer o gdb salvar o histórico de comandos?

195

Como posso configurar gdbpara salvar o histórico de comandos? Ao iniciar uma nova gdbsessão, eu gostaria de usar as teclas de seta para cima para acessar os comandos das sessões anteriores.

Frank
fonte
1
Nota: O .gdbinitarquivo deve ser protegido contra gravação por outras pessoas além de você no Linux.
urzeit
@urzeit - Eu acho que é uma causa perdida em distros como o Ubuntu. Eles permitem que qualquer pessoa entre no diretório pessoal de outras pessoas por padrão.
JWW
@jww O .gdbinitarquivo não será processado se as permissões não estiverem configuradas corretamente, independentemente do padrão ou de outras limitações nos diretórios pessoais que são usadas pelo sistema.
precisa saber é
@urzeit Se você criar um .gdbinitarquivo e esse não for o caso, significa que você umasknão está definido como um valor sensato 022. Em um sistema multiusuário, você tem problemas maiores do que apenas seu .gdbinitarquivo.
Kaz

Respostas:

283

Resposta curta: echo 'set history save on' >> ~/.gdbinit && chmod 600 ~/.gdbinit


Resposta longa:

O histórico de comandos é abordado no manual do GDB, 22.3 Histórico de comandos . Crie um arquivo $HOME/.gdbinit, altere suas permissões para 0600e adicione o seguinte conteúdo:

set history save on

Você pode definir o número de comandos anteriores salvos com o seguinte. O comando é descrito como "Defina o número de comandos que o gdb mantém em sua lista de histórico. O padrão é o valor da variável de ambiente GDBHISTSIZE ou 256 se essa variável não estiver configurada. Os valores não numéricos de GDBHISTSIZE serão ignorados. Se size é ilimitado ou se GDBHISTSIZE for um número negativo ou uma sequência vazia, o número de comandos que o gdb mantém na lista de histórico é ilimitado " .

set history size <size>

Um comando relacionado é set history remove-duplicates <count>. O comando é descrito como "Controlar a remoção de entradas duplicadas do histórico na lista do histórico de comandos. Se contagem for diferente de zero, o gdb analisará as últimas entradas do histórico de contagem e removerá a primeira entrada duplicada da entrada atual. adicionado à lista do histórico de comandos. Se a contagem for ilimitada, esse aspecto não será limitado. Se a contagem for 0, a remoção das entradas duplicadas do histórico será desativada " .

set history remove-duplicates <count>

Por padrão, o gdb salva o histórico no arquivo ./.gdb_history no diretório atual . Se você deseja que seu histórico de comandos não dependa do diretório em que está, inclua também:

set history filename ~/.gdb_history
jww
fonte
4
Acabei de descobrir isso por mim e pensei em compartilhá-lo no SO.
Frank
3
Para a próxima vez, é perfeitamente legítimo criar perguntas auto-respondidas como wiki não comunitário. :)
Greg Hewgill
@Frank Que tal se eu digitar na tecla seta para cima, recebo todos os comandos anteriores que começam com n.
SIFE 27/01
No GDB 8.0.1, isso parece funcionar sem as permissões especiais de arquivo.
Ryan1729
7

Se você ainda estiver com problemas, verifique se a variável de ambiente HISTSIZE é um número adequadamente alto. O meu estava vazio, fazendo com que a configuração "tamanho do histórico" do gdb fosse padrão como 0.

Adicionado

export HISTSIZE=100000000

para o meu ~ / .bashrc e tudo está inchado

Você pode verificar suas configurações do histórico do gdb executando (dentro do 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.

Dos documentos :

definir tamanho do tamanho do
histórico definir tamanho do histórico ilimitado
Defina o número de comandos que o GDB mantém em sua lista de histórico. O padrão é o valor da variável de ambiente HISTSIZE ou 256 se essa variável não estiver configurada. Se o tamanho for ilimitado, o número de comandos que o GDB mantém na lista de histórico é ilimitado.

Xiao
fonte
Eu tive o mesmo problema. Apesar de colocar set history size 100o arquivo .gdbinit, a variável de ambiente HISTSIZE ainda estava causando o tamanho do histórico ser definido como zero. O problema é que gdb não entende que HISTSIZE pode ser configurado para ilimitado
davidw
O bug HISTSIZE no gdb foi corrigido em junho de 2015 , mas não é provável que essa alteração esteja presente no seu sistema ainda. Enquanto isso, se HISTSIZEestiver definido, deve ser> 0 ou o gdb desativará o histórico.
Nate R.