在调试C#应用程序时,是否可以在对象内搜索值和/或其他字段? 我正在寻找可以在很多层次上钻取对象的深度搜索。
我正在寻找的是一种在非常复杂的对象中搜索(如F3进行文档搜索)的方法(例如,在快速监视窗口中进行调试时)。
答案 0 :(得分:13)
您可以使用OzCode(Visual Studio的附加组件),它允许您在on-hover-DataTip或QuickWatch窗口中查看要查看的成员{。}}。 / p>
请参阅以下屏幕截图中的示例:
完全披露:我是“OzCode”的共同创作者。
答案 1 :(得分:1)
我认为没有内置功能可以让您在调试模式下深入了解对象,除非使用扩展(如果可用)。
答案 2 :(得分:1)
除了Wilson Kao的帖子,您还可以尝试我使用的最简单的方法:
您还可以固定您在内心深处找到的某些属性,这样您就不必一次又一次地查找它们(当您将鼠标悬停在属性上时,每个属性的右侧都会显示针按钮)
以下是它的外观(变量是书籍):
来源:http://blogesh.wordpress.com/2008/09/09/visual-studio-debugging-tips-and-tricks/
编辑:有一种方法可以通过手动悬停和点击方法获取您访问的所有属性及其值(即在上图中,您可以通过代码获取ISBN及其值)。但是,您必须使用Visual Basic代码。然后,您可以搜索特定值的结果。
首先,您需要阅读Tracepoints和自定义宏: Click and go to "TracePoints – Running a Custom Macro" Also, here
接下来,您需要制作宏来执行您想要的操作。 在Visual Studio中,转到工具 - >宏 - >宏IDE ... 添加一个新宏。应该有一个名为Module 1的预设空白。在这里,您可以添加例程来执行您想要的操作。以下是我制作的宏,它将通过某个变量并输出它的属性(基本上,输出您在封面和单击方法中获得的数据)。这将输出到“输出”窗口,您可以通过查看 - >打开该窗口。输出强>
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中进行编码,因此可能存在错误...使用它并查看它是否可以执行您想要的操作(即仅输出与您需要的属性相匹配的属性)。好的部分是,您可以更改正在调试的宏代码,因此在编辑宏时无需停止项目!
要使用宏,您需要在代码中的某个位置放置一个断点,并且能够访问所需的对象。 - &GT;右键单击断点,然后转到点击时... 选中运行宏,然后从下拉列表中选择您的宏。
答案 3 :(得分:1)
答案 4 :(得分:-3)
当您处于调试模式时,请转到菜单栏上的Debug,然后转到窗口的下拉菜单。在那里,你会看到当地人。这将告诉您变量在当前断点处的值。您还可以通过树状菜单深入了解所有对象。要查找特定对象,您可以观察,然后输入要在那里观看的变量。确保在正确的位置有断点。祝你好运!