Come posso fare in modo che gdb salvi la cronologia dei comandi?


195

Come posso impostare in gdbmodo da salvare la cronologia dei comandi? All'avvio di una nuova gdbsessione, vorrei usare i tasti freccia su per accedere ai comandi delle sessioni precedenti.


1
Nota: il .gdbinitfile deve essere protetto da scrittura da terzi rispetto a te su Linux.
Urzeit,

@urzeit - Penso che sia una causa persa su distro come Ubuntu. Consentono chiunque nella directory home di qualcun altro per impostazione predefinita.
JWW

@jww Il .gdbinitfile non viene elaborato se le autorizzazioni non sono impostate correttamente, indipendentemente da quale sia l'impostazione predefinita o quali altre limitazioni sulle home directory siano utilizzate dal sistema.
Urzeit,

@urzeit Se crei un .gdbinitfile e non è così, significa che umasknon è impostato su un valore sano come 022. Quindi, in un sistema multiutente, hai problemi più grandi di un semplice .gdbinitfile.
Kaz,

Risposte:


283

Risposta breve: echo 'set history save on' >> ~/.gdbinit && chmod 600 ~/.gdbinit


Risposta lunga:

La cronologia dei comandi è descritta nel manuale GDB, 22.3 Cronologia dei comandi . Creare un file $HOME/.gdbinit, modificarne le autorizzazioni 0600e aggiungere il seguente contenuto:

set history save on

È possibile impostare il numero di comandi passati salvati con quanto segue. Il comando è descritto come "Imposta il numero di comandi che gdb mantiene nel suo elenco cronologico. Il valore predefinito è il valore della variabile d'ambiente GDBHISTSIZE o su 256 se questa variabile non è impostata. I valori non numerici di GDBHISTSIZE vengono ignorati. Se la dimensione è illimitata o se GDBHISTSIZE è un numero negativo o una stringa vuota, il numero di comandi che gdb mantiene nell'elenco della cronologia è illimitato " .

set history size <size>

Un comando correlato è set history remove-duplicates <count>. Il comando è descritto come "Controlla la rimozione delle voci della cronologia duplicate nell'elenco della cronologia dei comandi. Se il conteggio è diverso da zero, gdb guarderà indietro alle voci della cronologia dell'ultimo conteggio e rimuoverà la prima voce che è un duplicato della voce corrente aggiunto all'elenco della cronologia dei comandi. Se count è illimitato, questo aspetto è illimitato. Se count è 0, la rimozione delle voci duplicate della cronologia è disabilitata " .

set history remove-duplicates <count>

Per impostazione predefinita, gdb salva la cronologia nel file ./.gdb_history nella directory corrente . Se si desidera che la cronologia dei comandi non dipenda dalla directory in cui ci si trova, includere anche:

set history filename ~/.gdb_history

4
L'ho scoperto da solo e ho pensato di condividerlo su SO.
Frank

3
Per la prossima volta, è perfettamente legittimo creare domande con risposta autonoma come wiki non comunitario. :)
Greg Hewgill il

@Frank Che ne dici se scrivo, nquindi faccio clic con il tasto freccia su, ottengo tutti i comandi precedenti che iniziano con n.
SIFE,

Su GDB 8.0.1 questo sembra funzionare senza le autorizzazioni speciali per i file.
Ryan1729

7

Se i problemi persistono, assicurati che la variabile di ambiente HISTSIZE sia un numero adeguatamente alto. Il mio era vuoto, portando l'impostazione "dimensione cronologia" di gdb su 0.

aggiunto

export HISTSIZE=100000000

al mio ~ / .bashrc e tutto è perfetto

Puoi controllare le tue impostazioni della cronologia di gdb facendo (all'interno di gdb) "mostra cronologia":

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.

Dai documenti :

set formato storia dimensioni
set dimensioni illimitate storia
Impostare il numero di comandi che GDB mantiene nella sua lista della storia. L'impostazione predefinita è il valore della variabile di ambiente HISTSIZE o su 256 se questa variabile non è impostata. Se la dimensione è illimitata, il numero di comandi che GDB mantiene nell'elenco cronologico è illimitato.


Ho avuto lo stesso problema. Nonostante abbia set history size 100inserito il file .gdbinit, la variabile d'ambiente HISTSIZE stava ancora portando la dimensione della cronologia a zero. Il problema è che gdb non capisce che HISTSIZE può essere impostato su illimitato
DavidW,

Il bug HISTSIZE in gdb è stato corretto a partire da giugno 2015 , non è probabile che questa modifica sia ancora presente sul tuo sistema. Nel frattempo, se HISTSIZEimpostato, deve essere> 0, altrimenti gdb disabiliterà la cronologia.
Nate R.,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.