禁用/删除子断点

本文关键字:断点 删除 禁用 | 更新日期: 2023-09-27 18:13:06

我正在调试一个ASP。. NET网站与c#在Visual Studio。当我设置一个断点时(在调试期间),随着时间的推移,创建的断点将积累许多子断点。(参见这里)。
现在,有时当我通过单击红色符号删除断点时,下一次执行该行时仍然会击中该断点,因为子断点保持不变。

在断点窗口中删除断点将解决问题,但是当您设置了许多断点时,查找正确的断点是很烦人的。此外,删除具有许多子节点的断点是一个相当慢的操作。

所以要得到的问题,我可以禁用子断点的创建,或者有一种方法来快速删除所有的子?
其他解决方案是值得赞赏的!


请注意,这不是这个问题的副本:关于如何删除Visual Studio断点的问题,因为我问的是如何处理子断点。(尽管我们的预期目标是相同的)

禁用/删除子断点

下面的代码可以用作宏来删除所有的子断点。

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

如果你有很多断点,它仍然是非常慢的,所以如果你有子断点的问题,最好定期运行它。

下面的代码可以用作宏来删除当前选定行的断点。(注意,Visual Studio在遇到断点时自动选择断点所在的行。)

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

您可以为它指定一个键盘快捷键以方便访问。(工具>选项>环境>键盘)

这是一个新的基于javascript的宏外接程序(https://marketplace.visualstudio.com/items?itemName=VisualStudioPlatformTeam.MacrosforVisualStudio)的更新宏,用于删除所有子断点:

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