views:

236

answers:

4

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?

A: 

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.

lc
A: 

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

John Boker
A: 

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
Dean
+3  A: 

DTE.ExecuteCommand("Debug.SetNextStatement")

Thanks that works like a charm!
Motti