
我搜尋了很多類似的問題,但一無所獲。執行 gdb 時,我無法使用向上箭頭來瀏覽先前的命令。向上和向下箭頭將被忽略。在更改某些設定後,我開始觀察這種行為,但我不記得到底更改了哪些設定。
我沒有~/.xinputrc
文件,並且$TERM
設定為xterm
.
答案1
可能是因為您的歷史記錄大小為 0。
您可以檢查您的 gdb 歷史記錄大小:
(gdb) show history size
The size of the command history is 0.
(gdb)
如果史上最大大小為 0, 然後向上箭頭當然不起作用,因為無法保存歷史記錄。
我發現的主要原因是因為bash環境變數HISTSIZE為0或為空。這很令人沮喪,因為我認為歷史大小=(空值右邊)在~/.bashrc中可以使bash歷史記錄保存無限條目, 但副作用是 gdb 引用 $HISTSIZE 然後將 gdb 歷史記錄大小設為 0在 gdb 啟動時。
所以你可以把歷史大小=10000000在你的 ~/.bashrc 和向上箭頭現在應該可以工作(警告: 備份你的~/.bash_history在使用 HISTSIZE 之前):
(gdb) show history size
The size of the command history is 10000000.
(gdb)
如果你堅持要保留歷史大小=~/.bashrc 上為空,選項是在 ~/.bashrc 上建立此函數:
gdb() ( HISTSIZE=70000000; /usr/bin/gdb "$@"; )
。 ~/.bashrc重新加載,現在它改變了:
(gdb) show history size
The size of the command history is 70000000.
(gdb)
從 gdb 退出後,原來的 $HISTSIZE 不會被覆蓋(即保持為空,無限制),因為我們的 gdb 函數使用 subshell,即用括號括起來,gdb() (...):
$ echo $HISTSIZE
$
您還必須在退出時開啟歷史記錄,然後考慮在哪裡儲存歷史文件。以下是我的 ~/.gdbinit 文件,如果尚不存在,請建立它:
$ 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
$
你可能會問為什麼設定環境 HISTSIZE 10000000不起作用?這是因為它只影響程序,而不影響 gdb 本身,如第 頁所示http://www.delorie.com/gnu/docs/gdb/gdb_20.html:
將環境變數 varname 設定為 value。該值僅針對您的程式而變化,而不是針對 GDB 本身。
補丁現已可用,請參閱https://sourceware.org/bugzilla/show_bug.cgi?id=16999:
2015-06-17 18:14:09 世界標準時間:
...此補丁使無效 GDBHISTSIZE 的行為與 bash 處理 HISTSIZE 的方式一致。當我們遇到空值或超出範圍的 GDBHISTSIZE(超出 [0, INT_MAX])時,我們現在將歷史記錄大小設為無限製而不是 0。
2015-06-17 18:30:10 世界標準時間:
GDB 的下一個版本將不再讀取 HISTSIZE,因為這樣做會導致比它解決的問題更多的問題。相反,出於相同目的讀取 GDBHISTSIZE。為了更好地衡量,GDBHISTSIZE 的行為將與 bash 讀取 HISTSIZE 的方式相匹配,因此將 GDBHISTSIZE 設定為 -1 將導致 GDB 的歷史記錄大小不受限制。