如何:在调试器中监视表达式
更新:2007 年 11 月
本主题适用于:
版本 |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
速成版 |
||||
标准版 |
||||
专业团队版 |
表格图例:
适用 |
|
不适用 |
|
默认情况下隐藏的一条或多条命令。 |
在“监视”窗口和“快速监视”对话框中,可以输入要在调试会话期间监视的变量的名称和表达式。
使用“快速监视”对话框在同一时间可以检查单个变量或单个表达式。它可用来快速查看一个值或一个较大的数据结构。“监视”窗口可以存储多个要在调试会话过程中查看的变量和表达式。某些版本的 Visual Studio 有多个“监视”窗口,其编号为 Watch1 到 Watch4。
变量名是可输入的最简单的表达式。如果要调试本机代码,可以使用注册名以及变量名。然而,调试器还可以接受比这更复杂的表达式。例如,您可以输入下列表达式以获得三个变量的平均值:
(var1 + var2 + var3) / 3
在 C# 中,可以输入对象 ID 或别名,而不能输入对象名。
调试器在“监视”窗口中接受大多数合法的语言表达式。有关更多信息,请参见调试器中的表达式。
如果正在用本机代码编程,有时可能需要限定变量名或包含变量名的表达式的上下文。上下文指变量所处的函数、源文件和模块。如果需要限定上下文,您可以使用上下文运算符语法。有关更多信息,请参见 上下文运算符(C/C++ 语言表达式)。
影响程序状态的表达式
计算某些表达式可以更改变量的值,或会影响程序的状态。例如,计算下列表达式会更改 var1 的值:
var1 = var2
更改数据的表达式被称为有副作用的表达式。如果在“监视”窗口中输入有副作用的表达式,则每次“监视”窗口计算该表达式时都将发生副作用。如果您不知道该表达式有副作用,则可能产生意外的结果。首次输入已知有副作用的表达式时,将只对其计算一次。随后的计算将被禁用。通过单击出现在值旁边的更新图标,可以手动重写此行为。
意外的副作用通常是函数求值的结果。例如,您可能在“监视”窗口中输入了下列函数调用。
Func1(var1)
如果从“监视”窗口或“快速监视”调用函数,则被调用的函数可能更改数据,从而产生副作用。避免函数计算可能产生的意外副作用的方法之一是在“选项”对话框中关闭自动函数计算功能。这将禁止对较新的语言功能(例如属性)进行自动计算。但这样会更加安全。
说明: |
---|
当在“监视”窗口中检查表达式时,可能会看到一个更新图标,该图标就像是绿色圆圈中按相反方向旋转的两个绿色箭头。如果已经关闭了自动函数计算功能,则更有可能看到刷新图标。该更新图标指示存在错误或过期的值。有关更多信息,请参见 如何:刷新监视值。 |
对于本机代码和 C#,可以使用格式说明符指定表达式值的显示格式。有关更多信息,请参见C++ 中的格式说明符和C# 中的格式说明符。
Visual Studio 调试器将自动展开常见的数据类型,以显示这些数据类型的最重要的元素。您可以添加展开自定义数据类型的行为。有关更多信息,请参见显示自定义数据类型和可视化工具。
说明: |
---|
显示的对话框和菜单命令可能会与“帮助”中的描述不同,具体取决于您的当前设置或版本。若要更改设置,请在“工具”菜单上选择“导入和导出设置”。有关更多信息,请参见 Visual Studio 设置。 |
计算“监视”窗口中的表达式
在“监视”窗口中,单击“名称”列中的空行。调试器在此时必须处于中断模式。键入或粘贴要监视的变量名或表达式。
- 或 -
将变量拖到“监视”窗口中的某行。
按 Enter。
结果出现在“值”列中。如果键入数组或对象变量的名称,“名称”列中的名称旁边就会出现树控件。您可以展开或折叠“名称”列中的变量。
表达式一直保留在“监视”窗口中,直到将其删除为止。
计算“快速监视”中的表达式
在“快速监视”对话框中,将变量、寄存器或表达式键入或粘贴到“表达式”文本框中。
单击“重新计算”或按 Enter。
值出现在“当前值”框中。
如果在“表达式”框中键入数组或对象变量的名称,则“当前值”框中的名称旁边就会出现树控件。您可以展开或折叠“名称”列中的变量。
重新计算“快速监视”中以前的表达式
在“快速监视”对话框中,单击出现在“表达式”框右侧的向下箭头。
从下拉列表中选择一个以前的表达式。
单击“重新计算”。