2010-07-05 2 views
160

Как настроить gdb так, чтобы он сохранял историю команд? При запуске нового сеанса gdb я хотел бы использовать клавиши со стрелками для доступа к командам предыдущих сеансов.Как я могу заставить gdb сохранить историю команд?

+1

Примечание: Файл '.gdbinit' должен быть защищен от записи другими, чем вы, на linux. – urzeit

+0

@urzeit - Я думаю, что это потерянное дело на дистрибутивах, таких как Ubuntu. Они разрешают кому-либо войти в чужой домашний каталог по умолчанию. – jww

+0

@jww Файл '.gdbinit' не обрабатывается, если разрешения не настроены правильно, независимо от того, что является стандартным или какие другие ограничения для домашних каталогов используются системой. – urzeit

ответ

225

Короткий ответ: echo 'set history save on' >> ~/.gdbinit && chmod 600 ~/.gdbinit


Длинный ответ:

История команды кроется в GDB manual, 22.3 Command History. Создайте файл $HOME/.gdbinit, изменить права доступа к 0600, и добавить следующее содержание:

set history save on 

Вы можете установить количество предыдущих команд, сохраненных с помощью следующих действий. Команда описывается как «Задайте количество команд, которые gdb хранит в своем списке хронологии. По умолчанию используется значение переменной среды GDBHISTSIZE или 256, если эта переменная не установлена. Нечисловые значения GDBHISTSIZE игнорируются. Если размер не ограничен или GDBHISTSIZE является либо отрицательным числом, либо пустой строкой, то количество команд gdb хранится в списке истории неограниченно «.

set history size <size> 

Связанная с этим команда set history remove-duplicates <count>. Команда описана как «Управляйте удалением повторяющихся записей истории в списке истории команд. Если счетчик не равен нулю, gdb будет оглядываться на последние записи статистики счета и удалять первую запись, которая является дубликатом текущей записи добавляется в список истории команд. Если счетчик не ограничен, этот lookbehind неограничен. Если count равен 0, удаление дубликатов записей истории отключено «.

set history remove-duplicates <count> 

По умолчанию, GDB сохраняет историю в файл ./.gdb_history in the current directory. Если вы хотите, чтобы ваша история команд не зависит от каталога вы находитесь, также включают в себя:

set history filename ~/.gdb_history 
+4

Только что нашел это для себя и подумал, что я поделюсь этим на SO. – Frank

+3

В следующий раз совершенно законно создавать такие ответы на собственные вопросы, как не-community-wiki. :) –

+0

@Frank Как насчет того, если я набираю 'n', тогда я стрелка вверх, я получаю все предыдущие команды, начинающиеся с' n'. – SIFE

6

Если вы все еще возникают проблемы, убедитесь, что ваша переменная HISTSIZE среда является подходящим большое число. Шахта была пуста, в результате чего «размер истории» GdB в настройки по умолчанию 0.

Добавлено

export HISTSIZE=100000000 

в моем ~/.bashrc и все набухают

Вы можете проверить настройки истории 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. 

от docs:

набор история размера размера История
комплекта размер неограничен
Установить число команд, которые GDB хранит в своем списке истории. По умолчанию это значение переменной среды HISTSIZE или 256, если эта переменная не установлена. Если размер неограничен, количество команд, хранящихся в списке хронологии, неограниченно.

+0

У меня была та же проблема. Несмотря на то, что в файле .gdbinit был задан 'set history size 100', переменная среды HISTSIZE по-прежнему вызывала нулевой размер истории. Проблема в том, что gdb не понимает, что [HISTSIZE может быть установлен как неограниченный] (http://stackoverflow.com/questions/9457233/unlimited-bash-history) – DavidW

+0

Ошибка HISTSIZE в gdb была [исправлена ​​с Июнь 2015 г.] (https://sourceware.org/bugzilla/show_bug.cgi?id=16999), а не то, что это изменение, скорее всего, будет присутствовать в вашей системе. Между тем, если «HISTSIZE» установлен, оно должно быть> 0, или gdb отключит историю. –

Смежные вопросы