I'm debugging an ASP.NET Website with C# in Visual Studio. When I set a breakpoint (during debug), over time, the created breakpoint will accumulate many child breakpoints. (See here.)
Now, sometimes when I remove a breakpoint by clicking the red glyph, the breakpoint will still be hit the next time the line is executed, because the child breakpoints persisted.
Removing the breakpoint in the breakpoint window will resolve the problem, but it's annoying to find the correct breakpoint(s) when you have many set. Also, the removal of a breakpoint with many children is quite a slow operation.
So to get to the question, can I disable this creation of child breakpoints, or is there a way to quickly remove all children?
Alternative solutions are appreciated!
Please note that this isn't a duplicate of this: Question on how to remove a Visual Studio Breakpoint, because I'm asking how to deal with the child breakpoints. (Although our intended goal is the same.)
The following code can be used as a macro to remove all the child breakpoints.
Sub RemoveChildBreakpoints()
Dim i As Integer
Dim len As Integer
Dim debugger As EnvDTE.Debugger = DTE.Debugger
Dim children As EnvDTE.Breakpoints
For Each bp As EnvDTE.Breakpoint In debugger.Breakpoints
children = bp.Children
len = children.Count
For i = len To 1 Step -1
children.Item(i).Delete()
Next
Next
End Sub
It's still insanely slow if you have many breakpoints, so it's best to do run it on a regular basis if you're having a problem with child breakpoints.
The following code can be used as a macro to remove the breakpoint on the currently selected line. (Note that Visual Studio automatically selects the line of a breakpoint when it is hit.)
Sub RemoveBreakPoint()
Dim debugger As EnvDTE.Debugger = DTE.Debugger
Dim children As EnvDTE.Breakpoints
Dim sel As Integer = DTE.ActiveDocument.Selection.ActivePoint.Line
For Each bp As EnvDTE.Breakpoint In debugger.Breakpoints
If bp.File <> DTE.ActiveDocument.FullName Then
Continue For
End If
For Each bpc As EnvDTE.Breakpoint In bp.Children
If bpc.FileLine = sel Then
bp.Delete()
Exit For
End If
Next
Next
End Sub
You can assign a keyboard shortcut to it for easy access. (Tools > Options > Environment > Keyboard.)
Here's an updated macro for the new javascript based macro add-in (https://marketplace.visualstudio.com/items?itemName=VisualStudioPlatformTeam.MacrosforVisualStudio) to remove all children breakpoints:
/// <reference path="C:\Users\ERobishaw\AppData\Local\Microsoft\VisualStudio\14.0\Macros\dte.js" />
try {
var outputWindowPane = dte.Windows.Item("{34E76E81-EE4A-11D0-AE2E-00A0C90FFFC3}").Object.ActivePane;
outputWindowPane.Activate();
outputWindowPane.OutputString("display this text in the output window panel\n");
var i;
var len;
var dbgr = dte.Debugger;
var brk = dbgr.Breakpoints;
outputWindowPane.OutputString("There are " + brk.Count + " Total\n");
//Macro.InsertText("There are " + brk.Count + " Total");
for (var bpi = 1; bpi <= brk.Count; bpi++) {
outputWindowPane.OutputString("On " + bpi + " of " + brk.Count + "\n");
var bp = brk.Item(bpi);
var children = bp.Children;
var len = children.Count;
for (var chi = len; chi > 0; chi--) {
outputWindowPane.OutputString(" Children Count = " + children.Count + "\n");
children.Item(chi).Delete();
}
}
}
catch (e) {
outputWindowPane.OutputString("Error\n");
outputWindowPane.OutputString(e + "\n");
}