Отключить/удалить дочерние точки останова?
Я отлаживаю сайт ASP.NET с С# в Visual Studio. Когда я устанавливаю точку останова (во время отладки), со временем созданная точка останова будет накапливать множество контрольных точек для дочерних элементов. (См. здесь.)
Теперь, иногда, когда я удаляю точку останова, нажимая красный глиф, точка останова будет по-прежнему ударяться в следующий раз, когда выполняется строка, потому что дочерние точки останова сохраняются.
Удаление точки останова в окне точки останова позволит решить проблему, но это раздражает, чтобы найти правильную точку останова, когда у вас много настроек. Кроме того, удаление точки останова с большим количеством детей - довольно медленная операция.
Итак, чтобы ответить на вопрос, могу ли я отключить это создание дочерних контрольных точек, или есть способ быстро удалить всех детей?
Альтернативные решения оцениваются!
Обратите внимание, что это не дубликат: Вопрос о том, как удалить точку останова Visual Studio, потому что я спрашиваю, как бороться с дочерними точками останова. (Хотя наша цель - одна и та же.)
Ответы
Ответ 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
Вы можете назначить ему ярлык для быстрого доступа. (Инструменты > Параметры > Средa > Клавиатура.)
Ответ 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");
}