#gdb
#gdb
Вопрос:
GDB позволяет регистрировать набор команд в определенную точку останова с помощью commands NUM
синтаксиса. Мне нужно зарегистрировать набор команд для определенной точки останова через внешний файл, используя синтаксис, подобный следующему:
commands ./main.c:18
silent
print buffer[0]
cont
end
commands ./io.c:29
silent
printf "Hello world %in", myvar1
cont
end
commands path/to/file:XX
Синтаксис составлен мной. Поскольку синтаксис NUM
in commands NUM
требует точного идентификационного номера среды выполнения точки останова (присвоенного GDB), я не могу использовать детерминированный синтаксис для этой цели.
В настоящее время я регистрирую точки останова через текстовый файл с таким содержимым:
break ./main.c:18
break ./io.c:29
а затем выдавать source breakpoints.txt
команду внутри GDB. Кажется, что нет способа зарегистрироваться commands
одновременно при регистрации точки останова:
(gdb) помогите break Установить точку останова в указанной строке или функции. break [PROBE_MODIFIER] [МЕСТОПОЛОЖЕНИЕ] [поток THREADNUM] [УСЛОВИЕ if] PROBE_MODIFIER должен присутствовать, если команда должна быть помещена в точку пробника. Допустимыми значениями являются
-probe' (for a generic, automatically guessed probe type),
-probe-stap’ (для зонда SystemTap) или `-probe-dtrace’ (для зонда DTrace). МЕСТОПОЛОЖЕНИЕ может быть номером строки, именем функции или «*» и адресом. Если указан номер строки, выполните разрыв в начале кода для этой строки. Если указана функция, выполните прерывание при запуске кода для этой функции. Если указан адрес, выполните прерывание по этому точному адресу. При отсутствии МЕСТОПОЛОЖЕНИЯ используется текущий адрес выполнения выбранного стекового фрейма. Это полезно для прерывания при возврате к фрейму стека.THREADNUM — это число из «информационных потоков». УСЛОВИЕ — это логическое выражение.
Несколько точек останова в одном месте разрешены и полезны, если их условия отличаются.
Вопрос
- Есть ли какой-нибудь простой способ установить некоторые предопределенные команды для заданной точки останова из файла?
- Если нет, есть ли какой-либо эквивалентный способ передачи
(gdb) info breakpoints
выходных данных в файл или программу,pipe
недоступный в GDB (версия 5.3)? В настоящее время я пытаюсь найти обходной путь, используяlogging
для этой цели функцию:
set logging file /tmp/breakpoints
set logging on
info breakpoints
set logging off
Ответ №1:
Есть ли какой-нибудь простой способ установить некоторые предопределенные команды для заданной точки останова из файла?
Да: если вы используете commands
without NUM
, команды будут применяться к последней установленной точке останова. Итак, вы хотите что-то вроде:
break main.c:18
commands
silent
print buffer[0]
cont
end