Как я могу заставить GDB сохранять историю команд?
195
Как я могу настроить gdbтак, чтобы он сохранял историю команд? При запуске нового gdbсеанса я хотел бы использовать клавиши со стрелками вверх для доступа к командам предыдущих сеансов.
Примечание. .gdbinitФайл должен быть защищен от записи другими пользователями Linux.
urzeit
@urzeit - я думаю, что это потеряно для дистрибутивов, таких как Ubuntu. По умолчанию они разрешают кому-либо входить в чей-либо домашний каталог.
jww
@jww .gdbinitФайл не обрабатывается, если разрешения не настроены правильно, независимо от того, какие настройки используются по умолчанию или какие другие ограничения для домашних каталогов используются системой.
urzeit
@urzeit Если вы создаете .gdbinitфайл, а это не так, это означает, что вы umaskне настроены на нормальное значение, например 022. Тогда в многопользовательской системе у вас есть большие проблемы, чем просто ваш .gdbinitфайл.
Каз
Ответы:
283
Короткий ответ: echo 'set history save on' >> ~/.gdbinit && chmod 600 ~/.gdbinit
Вы можете установить количество сохраненных прошлых команд следующим образом. Команда описывается как «Установить количество команд, которые GDB хранит в своем списке истории. По умолчанию это значение переменной среды GDBHISTSIZE или 256, если эта переменная не задана. Нечисловые значения GDBHISTSIZE игнорируются. Если size не ограничен или если GDBHISTSIZE является либо отрицательным числом, либо пустой строкой, то количество команд, которые gdb хранит в списке истории, не ограничено " .
set history size <size>
Связанная команда set history remove-duplicates <count>. Команда описана как «Управлять удалением повторяющихся записей истории в списке истории команд. Если число не равно нулю, GDB проверит последние записи истории счетчиков и удалит первую запись, которая является дубликатом текущей записи. добавлен в список истории команд. Если число не ограничено, то этот просмотр не ограничен. Если число равно 0, удаление дублирующихся записей истории отключено " .
set history remove-duplicates <count>
По умолчанию GDB сохраняет историю в файл ./.gdb_history в текущем каталоге . Если вы хотите, чтобы история команд не зависела от каталога, в котором вы находитесь, также включите:
Просто выяснил это для себя и решил поделиться этим на SO.
Франк
3
В следующий раз совершенно законно создавать такие вопросы с самостоятельным ответом, как не вики-сообщество. :)
Грег Хьюгилл
@Frank Как насчет того, что если я наберу, nто у меня стрелка вверх, я получу все предыдущие команды, которые начинаются с n.
SIFE
На GDB 8.0.1 это работает без специальных прав доступа к файлам.
Ryan1729
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
Ошибка HISTSIZE в gdb была исправлена по состоянию на июнь 2015 года , но это изменение, скорее всего, не будет присутствовать в вашей системе. Между тем, если HISTSIZEустановлено, оно должно быть> 0, иначе GDB отключит историю.
.gdbinit
Файл должен быть защищен от записи другими пользователями Linux..gdbinit
Файл не обрабатывается, если разрешения не настроены правильно, независимо от того, какие настройки используются по умолчанию или какие другие ограничения для домашних каталогов используются системой..gdbinit
файл, а это не так, это означает, что выumask
не настроены на нормальное значение, например022
. Тогда в многопользовательской системе у вас есть большие проблемы, чем просто ваш.gdbinit
файл.Ответы:
Короткий ответ:
echo 'set history save on' >> ~/.gdbinit && chmod 600 ~/.gdbinit
Длинный ответ:
История команд описана в руководстве GDB, 22.3 История команд . Создайте файл
$HOME/.gdbinit
, измените его разрешения0600
и добавьте следующее содержимое:Вы можете установить количество сохраненных прошлых команд следующим образом. Команда описывается как «Установить количество команд, которые GDB хранит в своем списке истории. По умолчанию это значение переменной среды GDBHISTSIZE или 256, если эта переменная не задана. Нечисловые значения GDBHISTSIZE игнорируются. Если size не ограничен или если GDBHISTSIZE является либо отрицательным числом, либо пустой строкой, то количество команд, которые gdb хранит в списке истории, не ограничено " .
Связанная команда
set history remove-duplicates <count>
. Команда описана как «Управлять удалением повторяющихся записей истории в списке истории команд. Если число не равно нулю, GDB проверит последние записи истории счетчиков и удалит первую запись, которая является дубликатом текущей записи. добавлен в список истории команд. Если число не ограничено, то этот просмотр не ограничен. Если число равно 0, удаление дублирующихся записей истории отключено " .По умолчанию GDB сохраняет историю в файл ./.gdb_history в текущем каталоге . Если вы хотите, чтобы история команд не зависела от каталога, в котором вы находитесь, также включите:
источник
n
то у меня стрелка вверх, я получу все предыдущие команды, которые начинаются сn
.Если у вас все еще возникают проблемы, убедитесь, что ваша переменная окружения HISTSIZE имеет достаточно большое число. Моя была пуста, в результате чего значение "размер истории" в GDB по умолчанию было равно 0.
добавленной
на мой ~ / .bashrc и все хорошо
Вы можете проверить настройки истории GDB, выполнив (внутри GDB) «Показать историю»:
Из документов :
источник
set history size 100
на добавление в файл .gdbinit, переменная среды HISTSIZE все еще приводила к тому, что размер истории устанавливался в ноль. Проблема в том, что GDB не понимает, что HISTSIZE можно установить неограниченнымHISTSIZE
установлено, оно должно быть> 0, иначе GDB отключит историю.