Disable/remove child Breakpoints?

前端 未结 3 542
猫巷女王i
猫巷女王i 2020-12-11 02:40

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.

相关标签:
3条回答
  • 2020-12-11 03:01

    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.

    0 讨论(0)
  • 2020-12-11 03:07

    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");
    }

    0 讨论(0)
  • 2020-12-11 03:25

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

    0 讨论(0)
提交回复
热议问题