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


195

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


1
注意:该.gdbinit文件必须由Linux以外的其他人进行写保护。
urzeit

@urzeit-我认为这是Ubuntu等发行版的迷失原因。默认情况下,它们允许任何人进入其他人的主目录。
jww '16

@jww .gdbinit如果权限设置不正确,则系统将不处理该文件,无论它是默认值还是对主目录的其他限制。
urzeit '16

@urzeit如果创建.gdbinit文件不是这种情况,则意味着您umask未将设置为合理的值,例如022。然后,在多用户系统中,您将面临的不仅仅是.gdbinit文件问题。
哈兹

Answers:


283

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


长答案:

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

set history save on

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

set history size <size>

一个相关的命令是set history remove-duplicates <count>。该命令被描述为“控制删除命令历史记录列表中重复的历史记录条目。如果count不为零,则gdb将回溯最后一个计数历史记录条目,并删除与当前条目重复的第一个条目。 “添加到命令历史记录列表中。如果count是无限的,则此后向无界。如果count为0,则禁止删除重复的历史记录条目”

set history remove-duplicates <count>

默认情况下,gdb将历史记录保存到当前目录中的文件./.gdb_history 。如果您希望命令历史记录不取决于您所在的目录,则还包括:

set history filename ~/.gdb_history

4
刚刚为自己找到了这个,并认为我会在SO上分享它。
弗兰克(Frank)2010年

3
对于下一次,创建诸如非社区Wiki之类的自我回答的问题是完全合法的。:)
Greg Hewgill'7年

@Frank如果我键入n然后按向上键,我会得到所有以n。开头的命令。
SIFE 2013年

在GDB 8.0.1上,没有特殊文件权限,这似乎可以工作。
Ryan1729 '17

7

如果仍然遇到问题,请确保您的HISTSIZE环境变量是一个适当的高数字。矿山是空的,导致gdb的“历史记录大小”设置默认为0。

添加

export HISTSIZE=100000000

到我的〜/ .bashrc,一切都膨胀了

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

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.

文档

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


我有同样的问题。尽管放set history size 100了.gdbinit文件,但是HISTSIZE环境变量仍然导致历史记录大小设置为零。问题是gdb无法理解HISTSIZE可以设置为无限制
DavidW

截至2015年6月,gdb中的HISTSIZE错误已得到修复,,但这并不是您的系统上可能已存在此更改。同时,如果HISTSIZE将其设置为必须大于0,否则gdb将禁用历史记录。
内特·
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.