禁用/删除子断点?

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

在断点窗口中删除断点将解决问题,但是当你有许多设置时找到正确的断点很烦人。 此外,删除许多孩子的断点是一个非常缓慢的操作。

那么为了解决这个问题,我可以禁用这个子断点的创建,还是有办法快速删除所有孩子?
备受欢迎的解决方案!

请注意,这与此不重复: 有关如何删除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 )的更新宏,用​​于删除所有子断点:

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