Любой способ сломать, только если в Visual C ++ 2008 встречается другой разрыв? - PullRequest
4 голосов
/ 08 октября 2011

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

Итак, скажем, есть функция, которая обновляет статус объектов.Это вызывается несколько раз за кадр.Я тестирую функцию, которая редактирует объект.Как только эта функция нажата, я могу перейти к функции UpdateStatus.Очевидно, что если я поставлю точку останова в UpdateStatus, она всегда сломается, и я никогда не смогу взаимодействовать с программой.Что было бы здорово, если бы я мог установить условие для точки останова, чтобы оно прерывалось только в том случае, если точка останова в другой функции достигла цели.Обратите внимание, что это только пример.

Я использую Visual C ++ 2008.

Ответы [ 3 ]

2 голосов
/ 09 ноября 2011

Я помню, что сам сталкивался с такой ситуацией. Я считаю, что вы можете объединить точки трассировки Visual Studio с макросами Visual Studio, чтобы сделать это довольно легко. На этой странице описывается, как написать макрос, который включает точки останова: http://weseetips.com/tag/enable-breakpoint/ Поскольку вы хотите включить только одну точку останова, вы захотите использовать некоторую комбинацию номера файла и строки в макросе, чтобы включить только точку останова. Вы хотите - вы можете найти члены объекта точки останова здесь: http://msdn.microsoft.com/en-us/library/envdte.breakpoint.aspx (File и FileLine выглядят особенно полезными)

На этой странице описано, как использовать «точку трассировки» для запуска макроса: http://msdn.microsoft.com/en-us/library/232dxah7.aspx (на этой странице есть несколько хороших снимков экрана установки точек трассировки: http://weblogs.asp.net/scottgu/archive/2010/08/18/debugging-tips-with-visual-studio-2010.aspx в VS2010)

Таким образом, вы можете создать макрос, который включит вашу точку останова, и создать точку трассировки, которая выполняет ваш макрос. (Вы даже можете добавить вторую точку трассировки, которая впоследствии отключит точку останова, чтобы вы могли легко повторить процесс.)

1 голос
/ 04 ноября 2011

Вы можете иметь первую точку останова, чтобы установить флаг при ударе, а затем позволить второй точке останова проверить этот флаг как условие.
Вы можете установить флаг, указав «сообщение», которое будет напечатано при нажатии, например:

{flag = 1;}

flag, конечно, должен существовать в области действия.
(Было бы хорошо, если бы можно было объявить переменную, которая существует только во время отладки, но я не знаю, как это сделать.)

1 голос
/ 09 октября 2011

Возможно, вы сможете разместить условную точку останова внутри самого UpdateStatus.

В качестве альтернативы, поместите условную точку останова на месте вызова UpdateStatus, затем выполните шаг-в ручном режиме.

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

...