Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I make gdb save the command history?

Tags:

debugging

gdb

People also ask

Can you backtrack in GDB?

If the target environment supports it, gdb can allow you to “rewind” the program by running it backward. A target environment that supports reverse execution should be able to “undo” the changes in machine state that have taken place as the program was executing normally.

What is batch mode in GDB?

Batch mode refers to batch processing, which means automated processing, without human intervention. According to GDB documentation : Batch mode disables pagination, sets unlimited terminal width and height see Screen Size, and acts as if set confirm off were in effect (see Messages/Warnings).

What is file command in GDB?

Use the file command to get both symbol table and program to run from the same file. symbol-file with no argument clears out gdb information on your program's symbol table. The symbol-file command causes gdb to forget the contents of some breakpoints and auto-display expressions.


Short answer: echo 'set history save on' >> ~/.gdbinit && chmod 600 ~/.gdbinit


Long answer:

Command history is covered in the GDB manual, 22.3 Command History. Create a file $HOME/.gdbinit, change its permissions to 0600, and add the following content:

set history save on

You can set the number of past commands saved with the following. The command is described as "Set the number of commands which gdb keeps in its history list. This defaults to the value of the environment variable GDBHISTSIZE, or to 256 if this variable is not set. Non-numeric values of GDBHISTSIZE are ignored. If size is unlimited or if GDBHISTSIZE is either a negative number or the empty string, then the number of commands gdb keeps in the history list is unlimited".

set history size <size>

A related command is set history remove-duplicates <count>. The command is described as "Control the removal of duplicate history entries in the command history list. If count is non-zero, gdb will look back at the last count history entries and remove the first entry that is a duplicate of the current entry being added to the command history list. If count is unlimited then this lookbehind is unbounded. If count is 0, then removal of duplicate history entries is disabled".

set history remove-duplicates <count>

By default, gdb saves the history into the file ./.gdb_history in the current directory. If you want your command history not to depend on the directory you are in, also include:

set history filename ~/.gdb_history

If you're still having trouble, make sure your HISTSIZE environment variable is a suitably high number. Mine was empty, causing gdb's "history size" setting to default to 0.

Added

export HISTSIZE=100000000

to my ~/.bashrc and everything is swell

You can check your gdb history settings by doing (inside gdb) "show history":

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.

From the docs:

set history size size
set history size unlimited
Set the number of commands which GDB keeps in its history list. This defaults to the value of the environment variable HISTSIZE, or to 256 if this variable is not set. If size is unlimited, the number of commands GDB keeps in the history list is unlimited.