C# 在调试模式下在对象内搜索
调试C#应用程序时,是否可以在对象内部搜索值和/或其他字段? 我正在寻找一个深入的搜索,可以深入到许多层次的对象C# 在调试模式下在对象内搜索,c#,visual-studio,visual-studio-2010,debugging,C#,Visual Studio,Visual Studio 2010,Debugging,调试C#应用程序时,是否可以在对象内部搜索值和/或其他字段? 我正在寻找一个深入的搜索,可以深入到许多层次的对象 我要寻找的是一种在非常复杂的对象中搜索(如F3搜索文档)的方法(例如,在调试时,在快速观察窗口中) 我认为没有内置功能可以让您在调试模式下深入研究对象,除非使用扩展(如果可用) 处于调试模式时,在菜单栏上转到调试,然后转到windows的下拉菜单。在那里,你会看到当地人。这将告诉您当前断点处的变量值。您还可以通过树菜单深入查看所有对象。要查找特定对象,您可以观察,然后在那里输入要观察
我要寻找的是一种在非常复杂的对象中搜索(如F3搜索文档)的方法(例如,在调试时,在快速观察窗口中) 我认为没有内置功能可以让您在调试模式下深入研究对象,除非使用扩展(如果可用) 处于调试模式时,在菜单栏上转到调试,然后转到windows的下拉菜单。在那里,你会看到当地人。这将告诉您当前断点处的变量值。您还可以通过树菜单深入查看所有对象。要查找特定对象,您可以观察,然后在那里输入要观察的变量。确保断点位于正确的位置。祝你好运 除了Wilson Kao的帖子,你还可以尝试我使用的最简单的方法:
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
子显示所有属性()
将outputWindow变暗为EnvDTE.outputWindow
outputWindow=DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput).Object
将currentStackFrame设置为EnvDTE.StackFrame
currentStackFrame=DTE.Debugger.currentStackFrame
outputWindow.ActivePane.OutputString(“*转储局部变量*”+vbCrLf)
对于currentStackFrame.Locals中的每个exp As EnvDTE.Expression
如果(exp.Name=“this”)那么“在这里,我只搜索名为“this”的变量”
outputWindow.ActivePane.OutputString(“-”+exp.Name+”:“+exp.Value.ToString()+vbCrLf)
helperDisplay(exp.DataMembers,outputWindow,1)
如果结束
下一个
端接头
私有子helperDisplay(ByRef exps作为EnvDTE.Expressions,ByRef OutputWindow作为EnvDTE.OutputWindow,ByVal n作为整数)
对于EXP中的每个ex
助手选项卡(n,输出窗口)
如果(ex.Name=“非公共成员”或ex.Name=“静态成员”),则
OutputWindow.ActivePane.OutputString(“~”+ex.Name+”:有“+ex.DataMembers.Count.ToString+vbCrLf”)
其他的
OutputWindow.ActivePane.OutputString(“~”+ex.Name+”:“+ex.Value.ToString()+vbCrLf)
如果(ex.DataMembers.Count 0),则
helperDisplay(例如DataMembers,OutputWindow,n+1)
如果结束
如果结束
下一个
端接头
私有子HelperTab(ByVal n为整数,ByRef OutputWindow为EnvDTE.OutputWindow)
对于i=1到n,步骤1
OutputWindow.ActivePane.OutputString(vbTab)
下一个
端接头
这段代码为我测试的一些DevExpress控件提供了例外情况。我认为这是因为某些值无法访问。我以前从来没有用VB编写过代码,所以里面可能有bug…玩一下,看看它是否能做你想做的事情(即只输出符合你需要的属性)。好的方面是,您可以在调试时更改宏代码,因此在编辑宏时无需停止项目
要使用宏,您需要在代码中的某个地方放置一个断点,该断点将被命中,并且能够访问所需的对象。
->右键单击断点并在点击时转到。选中运行宏:,然后从下拉列表中选择您的宏。您可以使用(Visual Studio的附加组件),它允许您从悬停数据提示或QuickWatch窗口中查找要查看的成员
请参见以下屏幕截图中的示例:
全面披露:我是“OzCode”的共同创建者。如果你想在没有附加组件的情况下完成,可以通过转到对象列表,选择所有对象(ctrl+a)并将其复制到可搜索文本编辑器中来完成。这将为您提供一个换行分隔列表
试着使用F10或F11来进一步向下移动对象。此外,还有一个内置功能可以查看对象值等。我认为您需要更具体地说明“搜索”的含义,以获得更好的答案。我只是假设它意味着能够访问值。那么你想通过什么来搜索呢?属性类型?如果属性不是string、number或bool,如何搜索值?举一个你想做什么的例子。谢谢你的投票,但正如你所看到的,@Shahar写的“搜索”,它意味着在其中键入内容并搜索的功能。当然,您可以在调试中在对象中导航,我的意思是