Помимо поста Уилсона Као, вы также можете попробовать самый простой подход, который я использую:
- Поместите точку останова в место, где будет использоваться переменная, ссылающаяся на объект.
- Наведите курсор на переменную при достижении точки останова. Вы должны увидеть всплывающее окно, отображающее свойства объекта верхнего уровня.
- Используйте маленькие + кнопки слева, чтобы углубиться в объект. Это может запутать.
Вы также можете закрепить определенные свойства, которые вы найдете в глубине, чтобы вам не приходилось искать их снова и снова (кнопка закрепления появляется с правой стороны каждого свойства при наведении курсора на свойство)
Вот пример того, как это выглядит (переменная - книги):
![Example](https://i.stack.imgur.com/xL5gT.png)
Источник: http://blogesh.wordpress.com/2008/09/09/visual-studio-debugging-tips-and-tricks/
Редактировать: существует способ получить все свойства и их значения, к которым вы обращаетесь с помощью ручного метода наведения-и-щелчка (т. Е. На изображении выше вы можете получить ISBN и его значение с помощью кода). Однако вы должны использовать код Visual Basic. Затем вы можете выполнить поиск по результатам для определенного значения.
Во-первых, вам нужно прочитать сведения о точках трассировки и пользовательских макросах:
Нажмите и перейдите к «TracePoints - Запуск пользовательского макроса»
Также здесь
Далее вам нужно сделать макрос, чтобы делать то, что вы хотите.
В Visual Studio перейдите в Инструменты -> Макросы -> Макросы IDE ...
Добавьте новый макрос. Должен быть предустановленный пустой модуль под названием Module 1. Здесь вы добавляете подпрограммы, чтобы делать то, что вы хотите. Ниже приведен макрос, который я сделал, чтобы пройти через некоторую переменную и вывести ее свойства (в основном, вывести данные, полученные с помощью метода cover-and-click). Это выводит в окно вывода, которое вы можете открыть через Вид -> Вывод .
Sub DisplayAllProperties()
Dim outputWindow As EnvDTE.OutputWindow
outputWindow = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput).Object
Dim currentStackFrame As EnvDTE.StackFrame
currentStackFrame = DTE.Debugger.CurrentStackFrame
outputWindow.ActivePane.OutputString("*Dumping Local Variables*" + vbCrLf)
For Each exp As EnvDTE.Expression In currentStackFrame.Locals
If (exp.Name = "this") Then ' Here, I am only searching in a variable named "this"
outputWindow.ActivePane.OutputString("- " + exp.Name + ": " + exp.Value.ToString() + vbCrLf)
helperDisplay(exp.DataMembers, outputWindow, 1)
End If
Next
End Sub
Private Sub helperDisplay(ByRef exps As EnvDTE.Expressions, ByRef OutputWindow As EnvDTE.OutputWindow, ByVal n As Integer)
For Each ex In exps
helperTabs(n, OutputWindow)
If (ex.Name = "Non-Public members" Or ex.Name = "Static members") Then
OutputWindow.ActivePane.OutputString("~ " + ex.Name + ": There are " + ex.DataMembers.Count.ToString + vbCrLf)
Else
OutputWindow.ActivePane.OutputString("~ " + ex.Name + ": " + ex.Value.ToString() + vbCrLf)
If (ex.DataMembers.Count <> 0) Then
helperDisplay(ex.DataMembers, OutputWindow, n + 1)
End If
End If
Next
End Sub
Private Sub helperTabs(ByVal n As Integer, ByRef OutputWindow As EnvDTE.OutputWindow)
For i = 1 To n Step 1
OutputWindow.ActivePane.OutputString(vbTab)
Next
End Sub
Этот код дает мне исключения для некоторых элементов управления DevExpress, на которых я его тестировал. Я думаю, это потому, что некоторые значения недоступны. Я никогда раньше не программировал на VB, так что там, вероятно, есть ошибки ... Поиграйте с ним и посмотрите, может ли он делать то, что вы хотите (т.е. выводить только те свойства, которые вам нужны). Хорошая часть заключается в том, что вы можете изменить код макроса в процессе отладки, поэтому нет необходимости останавливать проект во время редактирования макроса!
Чтобы использовать Макрос, вам нужно поместить точку останова где-нибудь в вашем коде, которая будет поражена и сможет получить доступ к нужному объекту.
-> Щелкните правой кнопкой мыши точку останова и перейдите к Когда нажмите ... Отключите Запустите макрос: и выберите свой макрос из выпадающего списка.