Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
Этот ответ не работает на 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 в навигации слева. После того как Вы определяете местоположение своего макроса в списке, можно перетащить его к любому меню или панели инструментов, где это, ее текст или значок могут быть настроены к тому, что Вы хотите.
Если можно искать слово точно, можно использовать пару сочетаний клавиш, чтобы сделать это быстро.
Инструменты-> Опции-> Enviroment-> Клавиатура
Присваивает им Control+Alt+F11 и F10, и можно пройти все результаты очень быстро. Я не нашел ярлык для движения к следующей ссылке как бы то ни было.
Мне нужно было что-то похожее, чтобы отключить все точки останова и поместить точку останова на каждую «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