Как мне добавить точки останова отладки к строкам, отображаемым в окне “Найти результаты” в Visual Studio

StackOverflow https://stackoverflow.com/questions/73063

Вопрос

В Visual Studio 2005-2015 можно найти все строки, содержащие определенные ссылки, и отобразить их в окне "Найти результаты".

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

Это было полезно?

Решение

Этот ответ не работает для Visual Studio 2015 или более поздней версии.Более свежий ответ можно найти здесь.

Вы можете сделать это довольно легко с помощью макроса Visual Studio.В Visual Studio нажмите Alt-F11, чтобы открыть среду разработки макросов и добавить новый модуль, щелкнув правой кнопкой мыши на MyMacros и выбрав Добавить | Add Module...

Вставьте следующее в редактор исходного кода:

Imports System
Imports System.IO
Imports System.Text.RegularExpressions
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports System.Diagnostics

Public Module CustomMacros
    Sub BreakpointFindResults()
        Dim findResultsWindow As Window = DTE.Windows.Item(Constants.vsWindowKindFindResults1)

        Dim selection As TextSelection
        selection = findResultsWindow.Selection
        selection.SelectAll()

        Dim findResultsReader As New StringReader(selection.Text)
        Dim findResult As String = findResultsReader.ReadLine()

        Dim findResultRegex As New Regex("(?<Path>.*?)\((?<LineNumber>\d+)\):")

        While Not findResult Is Nothing
            Dim findResultMatch As Match = findResultRegex.Match(findResult)

            If findResultMatch.Success Then
                Dim path As String = findResultMatch.Groups.Item("Path").Value
                Dim lineNumber As Integer = Integer.Parse(findResultMatch.Groups.Item("LineNumber").Value)

                Try
                    DTE.Debugger.Breakpoints.Add("", path, lineNumber)
                Catch ex As Exception
                    ' breakpoints can't be added everywhere
                End Try
            End If

            findResult = findResultsReader.ReadLine()
        End While
    End Sub
End Module

В этом примере используются результаты из окна "Найти результаты 1".;возможно, вы захотите создать индивидуальный ярлык для каждого окна результатов.

Вы можете создать сочетание клавиш, перейдя в меню Сервис | Параметры...и выбирая Клавиатура под Окружающая среда раздел в навигационной панели слева.Выберите нужный макрос и назначьте любой ярлык, который вам нравится.

Вы также можете добавить свой макрос в меню или панель инструментов, перейдя в меню Сервис | Настройка...и выбрав Макросы раздел в навигационной панели слева.Как только вы найдете нужный макрос в списке, вы можете перетащить его в любое меню или панель инструментов, где его текст или значок можно настроить так, как вы хотите.

Другие советы

Если вы можете точно выполнить поиск по слову, вы можете использовать пару сочетаний клавиш, чтобы сделать это быстро.

Инструменты -> Параметры -> Окружающая среда -> Клавиатура

  • Редактировать.GoToFindResults1NextLocation
  • EditorContextMenus.CodeWindow.Точка останова.Вставить точку останова

Назначьте им клавиши Control + Alt + F11 и F10, и вы сможете очень быстро просмотреть все результаты.Однако я не нашел кратчайшего пути для перехода к следующей ссылке.

Мне нужно было что-то подобное, чтобы отключить все точки останова и установить точку останова для каждого "Catch ex как исключение".Однако я немного расширил это, чтобы оно устанавливало точку останова при каждом появлении выбранной вами строки.Все, что вам нужно сделать с этим, это выделить строку, в которой вы хотите установить точку останова, и запустить макрос.

 Sub BreakPointAtString()

    Try
        DTE.ExecuteCommand("Debug.DisableAllBreakpoints")
    Catch ex As Exception

    End Try

    Dim tsSelection As String = DTE.ActiveDocument.Selection.text
    DTE.ActiveDocument.Selection.selectall()
    Dim AllText As String = DTE.ActiveDocument.Selection.Text

    Dim findResultsReader As New StringReader(AllText)
    Dim findResult As String = findResultsReader.ReadLine()
    Dim lineNum As Integer = 1

    Do Until findResultsReader.Peek = -1
        lineNum += 1
        findResult = findResultsReader.ReadLine()
        If Trim(findResult) = Trim(tsSelection) Then
            DTE.ActiveDocument.Selection.GotoLine(lineNum)
            DTE.ExecuteCommand("Debug.ToggleBreakpoint")
        End If
    Loop

End Sub

Надеюсь, у вас это сработает :)

Пол, большое спасибо, но у меня следующая ошибка (окно сообщения), возможно, мне нужно перезагрузить компьютер:

Error
---------------------------
Error HRESULT E_FAIL has been returned from a call to a COM component.
---------------------------
OK   
---------------------------

Я бы предложил следующее решение, которое очень простое, но оно работает для меня

Sub BreakPointsFromSearch()
    Dim n As Integer = InputBox("Enter the number of search results")

    For i = 1 To n
        DTE.ExecuteCommand("Edit.GoToNextLocation")
        DTE.ExecuteCommand("Debug.ToggleBreakpoint")            
    Next
End Sub
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top