我经常遇到我想在调试时禁用某些代码而不实际更改代码的情况。
我最终做的是有一个断点(通常是有条件的)然后当断点触发时我执行设置下一个语句。当代码被多次到达时,这可能是非常耗费人力的,所以我创建了一个宏:
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
---------------------------
有谁知道怎么解决这个问题?
答案 0 :(得分:8)
DTE.ExecuteCommand( “Debug.SetNextStatement”)
答案 1 :(得分:0)
它不会绕过不断变化的代码位,但本地布尔值怎么样?使用if语句包装要有条件跳过的代码。将其默认为true并每次重新初始化它。然后,假设您可以编写将此值更改为false的宏,则可以根据需要启用/禁用命中点。
以前从未这样做过,所以你可以告诉我宏是不是这样的。我通常只使用编辑并继续,注释掉我想跳过的代码。当然,如果代码中有一个lambda或匿名类型/方法,它就不起作用。
答案 2 :(得分:-1)
您可以检测它是否处于调试模式,然后使用if语句让代码不运行,这里有更多信息
答案 3 :(得分:-1)
你能在这个例子中使用编译条件吗?
#IF Config = "Debug" Then
' do my debug code here
#Else
' do my normal coding here
#End if