Як можна змусити gdb зберігати історію команд?


195

Як я можу налаштувати gdbтак, щоб він зберігав історію команд? Запускаючи новий gdbсеанс, я б хотів використовувати клавіші зі стрілками вгору для доступу до команд попередніх сесій.


1
Примітка. Цей .gdbinitфайл повинен захищати запис від інших, ніж ви в Linux.
урзейт

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

@jww .gdbinitФайл не обробляється, якщо дозволи не встановлені правильно, незалежно від того, що є типовим або які інші обмеження в домашніх каталогах використовуються системою.
урзейт

@urzeit Якщо ви створюєте .gdbinitфайл, але це не так, це означає, що ваш параметр umaskне встановлений як "здорове" значення 022. Тоді в багатокористувацькій системі у вас виникають більші проблеми, ніж просто ваш .gdbinitфайл.
Каз

Відповіді:


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>. Команда описана як "Керування видаленням дублікатів записів історії зі списку історії команд. Якщо кількість не дорівнює нулю, gdb оглянеться на останні записи історії підрахунку та видалить перший запис, який є дублікатом поточного запису додано до списку історії команд. Якщо кількість необмежених, то цей огляд позаду не обмежений. Якщо кількість дорівнює 0, видалення повторюваних записів історії вимкнено " .

set history remove-duplicates <count>

За замовчуванням gdb зберігає історію у файл ./.gdb_history у поточному каталозі . Якщо ви хочете, щоб історія ваших команд не залежала від каталогу, в якому ви перебуваєте, також додайте:

set history filename ~/.gdb_history

4
Щойно я це з’ясував для себе і подумав, що поділюсь цим.
Френк

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 відключить історію.
Нейт Р.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.