Отключить / удалить дочерние точки останова? - PullRequest
10 голосов
/ 03 ноября 2011

Я отлаживаю сайт ASP.NET с C # в Visual Studio. Когда я устанавливаю точку останова (во время отладки), со временем созданная точка останова накапливает много дочерних точек останова. (См. здесь .)
Теперь, иногда, когда я удаляю точку останова, щелкая красный глиф, точка останова будет по-прежнему попадать при следующем выполнении строки, потому что дочерние точки останова сохранялись.

Удаление точки останова в окне точек останова решит проблему, но раздражает поиск правильных точек останова, когда у вас установлено много параметров. Кроме того, удаление точки останова у многих детей является довольно медленной операцией.

Итак, чтобы перейти к вопросу, можно ли отключить создание дочерних точек останова или есть способ быстро удалить все дочерние элементы?
Альтернативные решения приветствуются!


Обратите внимание, что это не дубликат этого: Вопрос о том, как удалить точку останова Visual Studio , потому что я спрашиваю, как обращаться с дочерними точками останова. (Хотя наша намеченная цель та же.)

Ответы [ 3 ]

2 голосов
/ 07 декабря 2011

Следующий код можно использовать в качестве макроса для удаления всех дочерних точек останова.

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 голос
/ 23 декабря 2016

Вот обновленный макрос для новой надстройки макроса на основе 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");
}
1 голос
/ 17 апреля 2012

Следующий код можно использовать в качестве макроса для удаления точки останова в текущей выбранной строке.(Обратите внимание, что 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

Для быстрого доступа к ней можно назначить сочетание клавиш.(Инструменты> Параметры> Среда> Клавиатура.)

...