我搜索了很多类似的问题,但一无所获。运行 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。当我们遇到非数字 GDBHISTSIZE 时,我们什么也不做。
2015-06-17 18:30:10 世界标准时间:
GDB 的下一个版本将不再读取 HISTSIZE,因为这样做会导致比它解决的问题更多的问题。相反,出于相同目的读取 GDBHISTSIZE。为了更好地衡量,GDBHISTSIZE 的行为将与 bash 读取 HISTSIZE 的方式相匹配,因此将 GDBHISTSIZE 设置为 -1 将导致 GDB 的历史记录大小不受限制。