Как добавить точки останова отладки к строкам, отображаемым в окне «Результаты поиска» в Visual Studio

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
18
0
8 594
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

Инструменты -> Параметры -> Среда -> Клавиатура

  • Edit.GoToFindResults1NextLocation
  • EditorContextMenus.CodeWindow.Breakpoint.InsertBreakpoint

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

F3 и F9 делают это без переназначения каких-либо ярлыков.

StuperUser 24.08.2011 17:18

F3 переходит к следующему результату на текущей панели, а не к следующей строке в результатах поиска. Можно использовать F3 на панели результатов поиска, но вам также нужно нажать Enter и вкладку между панелями кода и результатов. Этот ответ избавляет от множества нажатий клавиш.

Nathan Kovner 15.08.2017 18:57
Ответ принят как подходящий

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

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

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

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»; вы можете создать индивидуальный ярлык для каждого окна результатов.

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

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

Это еще возможно? Я не уверен, что должно вызвать нажатие клавиши alt F11, и не могу найти окно макроса для перехода в Visual Studio 2017.

SweetTomato 23.05.2018 21:37

@SweetTomato Этому ответу почти 10 лет. Я не использовал ни одного варианта Visual Studio более 5 лет, но сомневаюсь, что это актуально.

Jeff Hillman 03.07.2018 17:11

Я думаю, что для новых макросов требуется .js

Demodave 10.10.2018 01:03

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

 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

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