2011-11-03 181 views
10

我正在使用C#在Visual Studio中调试ASP.NET网站。当我设置断点时(在调试过程中),随着时间的推移,创建的断点将累积许多子断点。 (请参阅here。)
现在,有时当我通过单击红色标志删除断点时,由于子断点持续存在,断点在下一次执行时仍会被触发。禁用/删除子节点?

在断点窗口中删除断点将解决问题,但是当你有很多设置时找到正确的断点是烦人的。而且,与许多孩子一起移除断点是相当缓慢的操作。

因此,要解决这个问题,我可以禁用这个创建子断点,还是有办法快速删除所有的孩子?
备选解决方案非常感谢!


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

+0

嗯,你为什么如此确信你的问题不是重复的?对我来说,就像你刚刚对如何提出问题有更好的想法。在任何情况下,您的答案肯定在[该微博连接页面由该帖子ref'd](http://connect.microsoft.com/VisualStudio/feedback/details/391642/permanently-remove-a-breakpoint-in- visual-studio-during-debugging) – sq33G

+0

“更好”表示它不同;因此不是重复的。 :) 此外,如果这个问题会产生不同的答案,这不会验证其唯一性吗? –

+0

当有答案时,我们会说话;) – sq33G

回答

2

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

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 

它仍然是出奇的慢,如果你有很多断点,所以这是最好的,如果您有任何关于孩子断点问题做定期运行它。

1

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

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

1

下面是基于宏观的加载项(https://marketplace.visualstudio.com/items?itemName=VisualStudioPlatformTeam.MacrosforVisualStudio)新的JavaScript删除所有孩子一个更新的宏断点:

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