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

Fra*_*ank 186 debugging gdb

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

Fra*_*ank 268

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


答案很长:

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

set history save on
Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令设置保存的过去命令的数量.该命令被描述为"一套GDB保持在历史列表中的命令的数量.这样会默认使用环境变量GDBHISTSIZE的值,或256,如果这个变量没有设置.GDBHISTSIZE的非数值将被忽略.如果大小是无限的,或者如果GDBHISTSIZE是负数或空字符串,那么gdb在历史列表中保留的命令数是无限的".

set history size <size>
Run Code Online (Sandbox Code Playgroud)

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

set history remove-duplicates <count>
Run Code Online (Sandbox Code Playgroud)

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

set history filename ~/.gdb_history
Run Code Online (Sandbox Code Playgroud)

  • 也可以接受你自己的答案!:) (6认同)
  • 刚刚为自己找到了这个,并认为我会在SO上分享它. (4认同)
  • 下次,创建非社区维基等自我回答的问题是完全合法的.:) (3认同)
  • 我运行的是 Ubuntu 20.04,这个设置仅在我在 `$HOME/.gdbinit` 中创建 init 文件时才有效。这是我的版本:“GNU gdb (Ubuntu 9.2-0ubuntu1~20.04.1) 9.2” (3认同)

Xia*_*iao 7

如果您仍遇到问题,请确保您的HISTSIZE环境变量数字合适.我的是空的,导致gdb的"历史大小"设置默认为0.

添加

export HISTSIZE=100000000
Run Code Online (Sandbox Code Playgroud)

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

您可以通过执行(在gdb内部)"show history"来检查您的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.
Run Code Online (Sandbox Code Playgroud)

来自文档:

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