Могу ли я иметь точку попадания в VisualStudio, которая пропускает строки? - PullRequest
6 голосов
/ 18 января 2009

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

В результате я получаю точку останова (обычно условную), а затем, когда срабатывает точка останова, я выполняю Set Next Statement Это может быть очень трудоемким, когда код достигается много раз, поэтому я создал макрос:

Sub Skip3Lines()
    DTE.ActiveDocument.Selection.LineDown(False, 3)
    DTE.Debugger.SetNextStatement()
End Sub

Затем я изменил точку останова на точку попадания (right-click -> When Hit...) и велел ей выполнить этот макрос.

Visual studio была очень рада выпустить следующее диалоговое окно:

---------------------------
Error
---------------------------
A macro called a debugger action which is not allowed while responding to an event or while being run because a breakpoint was hit.
---------------------------
OK
---------------------------

Кто-нибудь знает, как это обойти?

Ответы [ 4 ]

8 голосов
/ 08 июля 2009

DTE.ExecuteCommand ( "Debug.SetNextStatement")

0 голосов
/ 18 января 2009

Вы можете определить, находится ли он в режиме отладки, а затем использовать оператор if, чтобы не запускать код, вот дополнительная информация

http://weblogs.asp.net/jkey/archive/2003/11/23/39383.aspx

0 голосов
/ 04 февраля 2009

Не могли бы вы использовать условия компилятора в этом случае?

#IF Config = "Debug" Then
    ' do my debug code here
#Else
   ' do my normal coding here
#End if
0 голосов
/ 18 января 2009

Это не обходит бит изменяющегося кода, но как насчет локального логического значения? Оберните код, который вы хотите, условно пропустить оператором if. По умолчанию это true и повторно инициализировать его каждый раз. Затем, предполагая, что вы можете написать макрос, который изменит это значение на false, вы можете включить / отключить точку попадания по требованию.

Никогда раньше этого не делал, так что вы можете сказать мне, если макросы не работают таким образом. Я обычно просто использую edit-and-continue, комментируя код, который хочу пропустить. Конечно, это не сработает, если в коде есть лямбда или анонимный тип / метод.

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