GDB: что-то записывает вместо взлома? - PullRequest
5 голосов
/ 01 июня 2011

Возможно ли, чтобы GDB регистрировал что-то в терминале, вместо того, чтобы ломать его?Например, я хотел бы установить «точку останова» для какого-либо метода и иметь команду gdb print self, а также параметры при каждом вызове метода.По сути, я хочу вставить операторы печати в произвольные места без фактической перекомпиляции.

спасибо за любые предложения


Вот что я имею после этих полезных комментариев:

define logFoo
b fooMethod
commands
po self
end
end

GDB, похоже, не нравится вложенный конецзаявления хотя.есть мысли?

Ответы [ 3 ]

11 голосов
/ 01 июня 2011

Вы можете использовать Командные списки точек останова .Вот пример, как это сделать.

Например, вот как вы можете использовать команды точки останова для вывода значения x при входе в foo всякий раз, когда x положительно.

 break foo if x>0
 commands
 silent
 printf "x is %d\n",x
 cont
 end
2 голосов
/ 01 июня 2011

Используйте точку останова, как обычно, и установите макрос для входа и продолжения:

 define c
 print "foo"
 cont
 c
 end
0 голосов
/ 01 июня 2011

Нет, это невозможно.Вы можете подключиться только к символам кода и машинного кода.Если вы хотите регистрировать вывод, вам понадобятся функции регистрации.

Если вы отслеживаете конкретные ошибки, попробуйте использовать условные точки останова и просмотрите переменные.loggin может быть альтернативой использованию командных файлов GDB

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...