Хорошо, info break перечисляет точки останова, но не в формате, который бы хорошо работал с их повторным использованием с помощью команды --command, как в этом вопросе . Есть ли у GDB способ снова сбросить их в файл, приемлемый для ввода? Иногда в сеансе отладки необходимо перезапустить GDB после создания набора точек останова для тестирования.
Файл .gdbinit имеет ту же проблему, что и --command. Команда info break не выводит список команд, а представляет собой таблицу для использования человеком.
Чтобы уточнить, вот образец информационного перерыва :
(gdb) информационная пауза Num Type Disp Enb Address What 1 точка останова сохранить y 0x08048517 <foo :: bar (void) +7>
Make breakpoint pending on future shared library load? (y or [n]) [answered N; input not from terminal]
set breakpoint pending on
как описано в том, как ответить Y в скрипте gdb и gdb: как установить точки останова в будущих разделяемых библиотеках с помощью флагаbreak g_log if log_level==G_LOG_LEVEL_CRITICAL
), по крайней мере, gdb 7.8.1 прекратит синтаксический анализ дальнейших команд. Если у вас есть дополнительные команды, которые должны быть выполнены для этой точки останова, поместитеcommands
строку передcondition
строкой.Этот ответ устарел. GDB теперь поддерживает сохранение напрямую. Смотрите этот ответ .
Вы можете использовать ведение журнала:
Теперь файл breaks.txt содержит:
Написать сценарий AWK, преобразующий его в формат, полезный для файла
.gdbinit
или--command
, легко. Или вы можете даже сделать так, чтобы сценарий выдавал отдельные--eval-command
символы в командной строке GDB ...Добавление этого небольшого макроса в .gdbinit поможет вам в этом:
источник
save breakpoints
команду.Поместите ваши команды GDB и точки останова в файл .gdbinit так же, как вы могли бы ввести их в командной
gdb>
строке, и GDB автоматически загрузит и запустит их при запуске. Это файл для каждого каталога, поэтому у вас могут быть разные файлы для разных проектов.источник
Расширение расширения Анон в к ответу Йоханнеса :
С помощью
brestore
вы можете восстановить точки останова, сохраненные с помощьюbsave
.источник
Расширение ответа Йоханнеса : вы можете автоматически переформатировать вывод
info break
в действительный командный файл GDB:После этого у вас будет действующий командный файл в формате
brestore.gdb
.У меня это сработало, когда приложение скомпилировано с
-g
.Я также успешно протестировал его с GDB v6.8 на Ubuntu 9.10 (Karmic Koala).
источник
Возможно это:
save breakpoints [filename]
источник
Поместите следующее в ~ / .gdbinit, чтобы определить bsave и brestore как команды GDB для сохранения и восстановления точек останова.
источник
Я также получаю эту ошибку / предупреждение в GDB при попытке включить ведение журнала в режиме TUI . Однако ведение журнала, похоже, работает в режиме "без TUI". Поэтому я выхожу из режима TUI всякий раз, когда хочу что-то записать. (Переключайтесь назад и вперед в режим TUI с помощью Ctrl+X , Ctrl+A ).
Вот как я работаю:
set logging on
- теперь жаловаться не должно.источник
Я нашел следующее дополнение к предыдущему ответу полезным для сохранения / загрузки точек останова в конкретный файл.
Как и в предыдущем ответе, добавьте следующий код в файл ~ / .gdbinit
источник
Проблема в том, что установка точки останова зависит от контекста. Что делать, если у вас есть две статические функции с именем foo ?
Если вы уже отлаживаете один из модулей, определяющих foo, то GDB предположит, что вы имели в виду именно этот. Но если вы просто скопируете «break foo» в файл, а затем прочитаете этот файл при запуске, не будет ясно, какую функцию foo вы имеете в виду.
источник
Есть другие идеи? у меня есть
после
РЕДАКТИРОВАТЬ:
Я знаю, что вопрос в том, «как сохранить список точек останова», однако я только что обнаружил, что с помощью GDB мы можем просто установить точки останова «сохраненные в файле»
где
breakpoints.txt
такой файл:источник