GDB 向上箭頭不起作用

GDB 向上箭頭不起作用

我搜尋了很多類似的問題,但一無所獲。執行 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 函數使用 subshel​​l,即用括號括起來,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 的歷史記錄大小不受限制。

相關內容