Jak zmusić gdb do zapisania historii poleceń?

195

Jak skonfigurować, gdbaby zapisywała historię poleceń? Podczas rozpoczynania nowej gdbsesji chciałbym użyć klawiszy strzałek w górę, aby uzyskać dostęp do poleceń poprzednich sesji.

Szczery
źródło
1
Uwaga: .gdbinitplik musi być chroniony przed zapisem przez osoby inne niż ty w systemie Linux.
urzeit
@urzeit - Myślę, że to stracona przyczyna na dystrybucjach takich jak Ubuntu. Domyślnie umożliwiają każdemu dostęp do katalogu domowego innej osoby.
jww
@jww .gdbinitPlik nie jest przetwarzany, jeśli uprawnienia nie są ustawione poprawnie, bez względu na to, jakie są domyślne lub jakie inne ograniczenia katalogów domowych są używane przez system.
urzeit
@urzeit Jeśli utworzysz .gdbinitplik, ale tak nie jest, oznacza to, że nie masz umaskustawionej rozsądnej wartości, takiej jak 022. W systemie z wieloma użytkownikami masz większe problemy niż sam .gdbinitplik.
Kaz

Odpowiedzi:

283

Krótka odpowiedź: echo 'set history save on' >> ~/.gdbinit && chmod 600 ~/.gdbinit


Długa odpowiedź:

Historia poleceń jest opisana w instrukcji GDB, 22.3 Historia poleceń . Utwórz plik $HOME/.gdbinit, zmień jego uprawnienia 0600i dodaj następującą treść:

set history save on

Możesz ustawić liczbę wcześniejszych poleceń zapisanych za pomocą następujących. Polecenie jest opisane jako „Ustaw liczbę poleceń przechowywanych przez gdb na liście historii. Wartość domyślna to wartość zmiennej środowiskowej GDBHISTSIZE lub 256, jeśli ta zmienna nie jest ustawiona. Wartości nienumeryczne GDBHISTSIZE są ignorowane. Jeśli rozmiar jest nieograniczony lub jeśli GDBHISTSIZE jest liczbą ujemną lub pustym łańcuchem, liczba poleceń przechowywanych przez gdb na liście historii jest nieograniczona " .

set history size <size>

Powiązane polecenie to set history remove-duplicates <count>. Polecenie jest opisane jako „Kontroluj usuwanie zduplikowanych wpisów historii na liście historii poleceń. Jeśli liczba jest różna od zera, gdb spojrzy wstecz na ostatnie wpisy historii liczenia i usunie pierwszy wpis będący duplikatem bieżącego wpisu będącego dodane do listy historii poleceń. Jeśli liczba jest nieograniczona, to ten wygląd jest nieograniczony. Jeśli liczba jest równa 0, usuwanie zduplikowanych wpisów historii jest wyłączone " .

set history remove-duplicates <count>

Domyślnie gdb zapisuje historię w pliku ./.gdb_history w bieżącym katalogu . Jeśli chcesz, aby historia poleceń nie zależała od katalogu, w którym się znajdujesz, dołącz także:

set history filename ~/.gdb_history
jww
źródło
4
Właśnie to odkryłem i pomyślałem, że podzielę się tym na SO.
Frank
3
Następnym razem całkowicie uzasadnione jest tworzenie takich pytań, na które nie udzielono odpowiedzi w społeczności wiki. :)
Greg Hewgill
@Frank Jak o tym, czy wpisuję npotem klawisz strzałki w górę, mam wszystkie poprzednie polecenia, które zaczynają n.
SIFE
W GDB 8.0.1 wydaje się, że działa bez specjalnych uprawnień do plików.
Ryan1729,
7

Jeśli nadal masz problemy, upewnij się, że zmienna środowiskowa HISTSIZE ma odpowiednio wysoką liczbę. Mój był pusty, co spowodowało ustawienie domyślnego rozmiaru historii gdb na 0.

Dodany

export HISTSIZE=100000000

do mojego ~ / .bashrc i wszystko puchnie

Możesz sprawdzić ustawienia historii gdb, wykonując (wewnątrz gdb) „pokaż historię”:

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.

Z dokumentów :

ustaw historię rozmiar rozmiar
ustaw historię rozmiar nieograniczony
Ustaw liczbę poleceń, które GDB przechowuje na swojej liście historii. Domyślnie jest to wartość zmiennej środowiskowej HISTSIZE lub 256, jeśli ta zmienna nie jest ustawiona. Jeśli rozmiar jest nieograniczony, liczba poleceń przechowywanych przez GDB na liście historii jest nieograniczona.

Xiao
źródło
Miałem ten sam problem. Pomimo wstawienia set history size 100pliku .gdbinit zmienna środowiskowa HISTSIZE wciąż powodowała ustawienie wielkości historii na zero. Problem polega na tym, że gdb nie rozumie, że HISTSIZE można ustawić na nieograniczony
DavidW
Błąd HISTSIZE w gdb został naprawiony w czerwcu 2015 r. Nie chodzi o to, że zmiana ta prawdopodobnie będzie jeszcze obecna w twoim systemie. W międzyczasie, jeśli HISTSIZEjest ustawiony, musi wynosić> 0, inaczej gdb wyłączy historię.
Nate R.