【问题标题】:Disable/remove child Breakpoints?禁用/删除子断点?
【发布时间】:2011-11-03 10:47:04
【问题描述】:

我正在 Visual Studio 中使用 C# 调试 ASP.NET 网站。当我设置断点时(在调试期间),随着时间的推移,创建的断点会累积许多子断点。 (见here。)
现在,有时当我通过单击红色字形删除断点时,下一次执行该行时仍会命中该断点,因为子断点仍然存在。

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

所以要回答这个问题,我可以禁用创建子断点,还是有办法快速删除所有子断点?
替代解决方案表示赞赏!


请注意,这不是以下内容的重复:Question on how to remove a Visual Studio Breakpoint,因为我在问如何处理子断点。 (尽管我们的预期目标是相同的。)

【问题讨论】:

  • 嗯,你为什么这么确定你的问题不是重复的?在我看来,您对如何提出问题有了更好的了解。无论如何,你的答案肯定在Microsoft Connect page ref'd by that post
  • "Better" 表示不同;因此不是重复的。 :) 另外,如果这个问题会产生不同的答案,那岂不是也验证了它的独特性?
  • 有答案后,我们再谈;)
  • 那么您是否尝试过不重复问题的答案?是什么导致该答案不适用于您的问题?
  • 我不认为 Visual Studio 提供了不那么烦人的替代方案,也许可以创建一个自定义加载项来帮助禁用子断点,但这似乎有点牵强。

标签: c# .net visual-studio breakpoints visual-studio-debugging


【解决方案1】:

下面的代码可以作为一个宏来移除所有的子断点。

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

如果您有很多断点,它仍然非常慢,因此如果您遇到子断点问题,最好定期运行它。

【讨论】:

    【解决方案2】:

    下面的代码可以用作宏来删除当前选定行上的断点。 (请注意,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
    

    您可以为其分配键盘快捷键以便于访问。 (工具 > 选项 > 环境 > 键盘。)

    【讨论】:

      【解决方案3】:

      以下是新的基于 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");
      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-12
        • 1970-01-01
        相关资源
        最近更新 更多