GDB: что-то записывает вместо взлома?
Возможно ли, чтобы GDB регистрировал что-то в терминале, вместо того, чтобы ломать его? Например, я хотел бы установить "точку останова" для какого-либо метода, и каждый раз, когда вызывается метод, нужно, чтобы gdb print self, а также параметры. По сути, я хочу вставить операторы печати в произвольные места без фактической перекомпиляции.
спасибо за любые предложения
Это то, что я имею после этих полезных комментариев:
define logFoo
b fooMethod
commands
po self
end
end
Однако GDB, похоже, не нравятся вложенные операторы end. Какие-нибудь мысли?
3 ответа
Вы можете использовать Командные списки точек останова. Есть пример, как это сделать.
Например, вот как вы можете использовать команды точки останова для вывода значения x при входе в foo всякий раз, когда x положителен.
break foo if x>0 commands silent printf "x is %d\n",x cont end
Используйте обычную точку останова и установите макрос для входа и продолжения:
define c
print "foo"
cont
c
end
Нет, это невозможно. Вы можете подключиться только к символам кода и машинного кода. Если вы хотите регистрировать вывод, вам понадобится функция регистрации.
Если вы отслеживаете конкретные ошибки, попробуйте условные контрольные точки и посмотрите переменные.
РЕДАКТИРОВАТЬ:
Даже не входя в систему напрямую, это может быть альтернативой использованию командных файлов GDB