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.
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:
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.
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.
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.
.gdbinit
arquivo deve ser protegido contra gravação por outras pessoas além de você no Linux..gdbinit
arquivo 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..gdbinit
arquivo e esse não for o caso, significa que vocêumask
não está definido como um valor sensato022
. Em um sistema multiusuário, você tem problemas maiores do que apenas seu.gdbinit
arquivo.Respostas:
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 para0600
e adicione o seguinte conteúdo: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 " .
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 " .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:
fonte
n
a tecla seta para cima, recebo todos os comandos anteriores que começam comn
.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
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":
Dos documentos :
fonte
set history size 100
o 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 ilimitadoHISTSIZE
estiver definido, deve ser> 0 ou o gdb desativará o histórico.