Как я добавляю Точки останова Отладки к строкам, отображенным в окне “Find Results” в Visual Studio

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

14
задан Noah 8 March 2016 в 17:22
поделиться

4 ответа

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

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

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

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

Этот пример использует результаты в окне "Find Results 1"; Вы могли бы хотеть создать отдельный ярлык для каждого окна результата.

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

можно также добавить макрос к меню или панели инструментов путем движения в Tools|Customize... и выбора раздел Macros в навигации слева. После того как Вы определяете местоположение своего макроса в списке, можно перетащить его к любому меню или панели инструментов, где это, ее текст или значок могут быть настроены к тому, что Вы хотите.

16
ответ дан 1 December 2019 в 12:28
поделиться

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

Инструменты-> Опции-> Enviroment-> Клавиатура

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

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

3
ответ дан 1 December 2019 в 12:28
поделиться

Мне нужно было что-то похожее, чтобы отключить все точки останова и поместить точку останова на каждую «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

Надеюсь, у вас это получится :)

3
ответ дан 1 December 2019 в 12:28
поделиться

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

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
1
ответ дан 1 December 2019 в 12:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: