Невозможно установить точку наблюдения в GDB - PullRequest
0 голосов
/ 21 июля 2011

Я делаю отладку и хотел проверить место, где меняется значение переменной. Для этого я попытался установить точку наблюдения, сказав что-то вроде watch 'structure-> somefunc.getvalue ()', которая не является простой переменной(возможно, какая-то часть большей структуры, вызывающей функцию). Когда я делаю это, GDB в текущем контексте говорит, что нет символа «structure-> somefunc ..». Когда я делаю grep в том же каталоге, я получаю 3-4 экземпляраТо же выражение. Я что-то упустил?

1 Ответ

1 голос
/ 21 июля 2011

Я что-то упускаю?

Да, вам не хватает хотя бы пары вещей:

  • Выражение structure->somefunc.getvalue() не дает смысл. Вы, вероятно, имели в виду some_variable->some_field.getvalue()

  • Чтобы это выражение было действительным, вы должны находиться в контексте, где существует some_variable. Тот факт, что some_variable отображается в выводе grep, не означает, что GDB может в настоящее время оценить его. Может быть в состоянии оценить это , когда вы остановите программу в правильном контексте.

  • Нет смысла (и невозможно) устанавливать точку наблюдения на возвращаемое значение getvalue(). Точки наблюдения имеют смысл, только если вы можете указать память местоположение, которое хотите просмотреть. Если (как это вероятно) getvalue() возвращает что-то вроде this->m_value, то вам действительно нужно установить точку наблюдения на *(&some_variable->some_field.m_value).

...