Точки останова на переменное значение? - PullRequest
1 голос
/ 29 апреля 2010

Я гоняюсь за ошибкой, когда значение элемента объекта, кажется, волшебным образом меняется, без вызова каких-либо методов, которые его изменяют. Без сомнения, что-то очевидное, но доказать трудно. Я знаю, что могу ставить условные точки останова в методах, основанных на значении переменной, но возможно ли каким-либо образом фактически установить точку останова для самой переменной? например, точка останова, которая срабатывает, когда x == 4? Я знаю, что могу поставить часы, а как насчет точек останова?

Редактировать: это проект, предназначенный только для нативов, не управляемый малярий.

Ответы [ 2 ]

4 голосов
/ 29 апреля 2010

Вы можете использовать точку останова данных . Существует ряд ограничений относительно того, как и когда их можно использовать, а именно то, что они работают только в собственном коде.

(Насколько мне известно, вы можете сказать, что он ломается только при изменении переменной, а не при изменении ее до определенного значения, но я не совсем уверен; большая часть моего кода является смешанной управляемой / нативной поэтому не может использовать точки останова данных).

0 голосов
/ 30 апреля 2010

Что вам нужно сделать, это просто обернуть переменную в set / get - не просто шаблонные функции, а фактически в отдельный класс, где set / get ДОЛЖЕН использоваться для доступа. Затем установите точку останова там. В качестве альтернативы, для упрощения поиска и изменения вы можете заключить значение в класс и использовать перегрузки операторов (с соответствующими разбиениями) для изменения. Это, наверное, самое чистое и портативное решение.

Вы также можете обнаружить, что изменяемая переменная не соответствует вашим ожиданиям. Лучший пример, который у меня есть, это то, что у меня было unsigned int, где я вычитал из нуля, когда я хотел увеличить с нуля, поэтому, когда я искал места, которые, как я знал, изменил его, они не отмечались. Не удалось выяснить, что происходит.

Однако, насколько мне известно, VC ++ не поддерживает механизм прерывания произвольных изменений, если точка останова данных не будет работать для вас. например, если он был изменен из-за повреждения стека / кучи. Но если вы работаете в режиме отладки, я ожидаю, что VC ++ сломается на них.

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