Can I have a hit-point in VisualStudio that skips

2019-01-24 14:01发布

I often run into the situation where I want to disable some code while debugging without actually changing the code.

What I end up doing is having a break-point (usually conditional) and then when the break-point fires I perform a Set Next Statement. This can be very labor intensive when the code is reached many times so I created a macro:

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

I then changed my break-point to be a hit-point (right-click -> When Hit...) and told it to execute this macro.

Visual studio was all too happy to spit out the following dialog box:

---------------------------
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
---------------------------

Does anyone know how to get around this?

4条回答
手持菜刀,她持情操
2楼-- · 2019-01-24 14:23

You may be able to detect whether it's in debug mode, then use an if statement to have code not run, here's more information

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

查看更多
可以哭但决不认输i
3楼-- · 2019-01-24 14:37

It doesn't get around the changing code bit, but how about a local boolean? Wrap the code you want to conditionally skip with an if statement. Default it to true and re-initialize it every time. Then, assuming you can write a macro that changes this value to false, you can enable/disable the hit-point on demand.

Never done this before, so you can tell me if macros don't work like this. I usually just use edit-and-continue, commenting out the code I want to skip. Of course it doesn't work if the code has a lambda or anonymous type/method in it though.

查看更多
冷血范
4楼-- · 2019-01-24 14:40

DTE.ExecuteCommand("Debug.SetNextStatement")

查看更多
在下西门庆
5楼-- · 2019-01-24 14:40

Could you not use compiler condtitions in this instance?

#IF Config = "Debug" Then
    ' do my debug code here
#Else
   ' do my normal coding here
#End if
查看更多
登录 后发表回答