Debugging 如何让gdb保存命令历史记录?

Debugging 如何让gdb保存命令历史记录?,debugging,gdb,Debugging,Gdb,如何设置gdb以保存命令历史记录?启动新的gdb会话时,我想使用向上箭头键访问以前会话的命令 简短回答:echo'set history save on'>>~/.gdbinit&&chmod 600~/.gdbinit 长答覆: 命令历史记录将在中介绍。创建文件$HOME/.gdbinit,将其权限更改为0600,并添加以下内容: set history save on 您可以设置使用以下命令保存的过去命令数。该命令描述为“设置gdb在其历史记录列表中保留的命令数。这默认为环境变量GDBH

如何设置gdb以保存命令历史记录?启动新的
gdb
会话时,我想使用向上箭头键访问以前会话的命令

简短回答:
echo'set history save on'>>~/.gdbinit&&chmod 600~/.gdbinit


长答覆:

命令历史记录将在中介绍。创建文件
$HOME/.gdbinit
,将其权限更改为
0600
,并添加以下内容:

set history save on
您可以设置使用以下命令保存的过去命令数。该命令描述为“设置gdb在其历史记录列表中保留的命令数。这默认为环境变量GDBHISTSIZE的值,如果未设置此变量,则默认为256。GDBHISTSIZE的非数值将被忽略。如果大小不受限制,或者GDBHISTSIZE为负数或空字符串,则gdb在历史记录列表中保留的命令数不受限制”


如果您仍然有问题,请确保HISTSIZE环境变量的值适当高。我的值为空,导致gdb的“历史大小”设置默认为0

增加

对我的~/.bashrc来说,一切都很美好

您可以通过执行(在gdb内部)“显示历史记录”来检查gdb历史记录设置:

从:

设置历史记录大小
设置历史记录大小不受限制
设置GDB在其历史记录列表中保留的命令数。默认为环境变量HISTSIZE的值,如果未设置此变量,则为256。如果大小不受限制,则GDB在历史记录列表中保留的命令数不受限制


我自己刚刚发现了这一点,并认为我会分享它。下一次,创建非社区wiki这样的自我回答问题是完全合法的。@Frank如果我键入
n
,然后我向上箭头键,我会得到所有以前以
n
开头的命令。在GDB 8.0.1上,这似乎可以在没有特殊文件p的情况下工作权限。@Ryan1729 0600(八进制)的权限不是强制性的。0644(读/写给所有者,读给其他人)也会起作用。许多linux变体将umask设置为0022,这意味着文件是用0644创建的,因此它们对于
.gdbinit
来说很好。但是Debian/Ubuntu为每个用户创建一个私有组,并将umask设置为0002,这样默认情况下文件也可以写入该私有组中的任何人。这简化了帐户共享g(只需将您的朋友添加到您的私人组中,即可让他们完全访问),但违反了对
.gdbinit
的gdbs安全要求。注意:
.gdbinit
文件必须由linux上的其他人进行写保护。@urzeit-我认为这在像Ubuntu这样的发行版上是一个失败的原因。默认情况下,它们允许任何人进入任何其他人的主目录。@jww
.gdbinit
文件在许可的情况下不会被处理无论默认设置是什么,或者系统对主目录使用了什么其他限制,分区设置都不正确。@urzeit如果您创建了
.gdbinit
文件,但事实并非如此,这意味着您的
umask
没有设置为像
022
这样的正常值。那么在多用户系统中,您会遇到更大的问题n只有你的
.gdbinit
文件。我也有同样的问题。尽管将
设置历史大小100
放在.gdbinit文件中,HISTSIZE环境变量仍然导致历史大小设置为零。问题是gdb不理解gdb中的HISTSIZE错误已经存在,而不是这个更改可能存在同时,如果设置了
HISTSIZE
,则它必须大于0,否则gdb将禁用历史记录。
set history size <size>
set history remove-duplicates <count>
set history filename ~/.gdb_history
export HISTSIZE=100000000
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.