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





Если вы можете точно найти слово, вы можете использовать пару сочетаний клавиш, чтобы сделать это быстро.
Инструменты -> Параметры -> Среда -> Клавиатура
Назначьте их на Control + Alt + F11 и F10, и вы сможете очень быстро просмотреть все результаты. Однако я не нашел ярлыка для перехода к следующей ссылке.
F3 переходит к следующему результату на текущей панели, а не к следующей строке в результатах поиска. Можно использовать F3 на панели результатов поиска, но вам также нужно нажать Enter и вкладку между панелями кода и результатов. Этот ответ избавляет от множества нажатий клавиш.
Этот ответ не работает для 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 Этому ответу почти 10 лет. Я не использовал ни одного варианта Visual Studio более 5 лет, но сомневаюсь, что это актуально.
Я думаю, что для новых макросов требуется .js
Мне нужно было что-то подобное, чтобы отключить все точки останова и поставить точку останова на каждом «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
F3 и F9 делают это без переназначения каких-либо ярлыков.