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

Другие вопросы по тегам