检查“自动”和“局部变量”窗口中的变量
在调试时,“自动变量”和“局部变量”窗口会显示变量值。 窗口仅在调试会话期间可用。 “自动”窗口显示在当前语句(调试器暂停的位置)周围使用的变量。 局部变量 窗口显示本地范围中定义的变量,通常是当前函数或方法。
Autos 窗口适用于 C#、Visual Basic、C++ 和 Python 代码,但不适用于 JavaScript 或 F#。
若要打开“自动变量”窗口,请在调试时依次选择“调试”>“窗口”>“自动变量”,或按 Ctrl+Alt+V > A。
若要打开“局部变量”窗口,请在调试时选择“调试”>“窗口”>“局部变量”,或按 Alt+4。
使用“自动”和“局部变量”窗口
数组和对象以树控件的形式显示在 自动变量 和 局部变量 窗格中。 选择变量名称左侧的箭头以展开视图以显示字段和属性。 下面是 局部变量 窗口中 System.IO.FileStream 对象的示例:
本地变量 或 自动变量 窗口中的红色值表示该值自上次评估以来已更改。 更改可能来自以前的调试会话,或者因为你更改了窗口中的值。
调试器窗口中的默认数字格式为十进制。 若要将其更改为十六进制,请在 局部变量 或 自动 窗口中右键单击,然后选择 十六进制显示。 此更改会影响所有调试器窗口。
在“自动”或“局部变量”窗口中编辑变量值
若要编辑 自动 或 局部变量 窗口中大多数变量的值,请双击该值并输入新值。
可以为值输入表达式,例如 a + b
。 调试器接受最有效的语言表达式。
在原生C++代码中,可能需要限定变量名称的上下文。 有关详细信息,请参阅 上下文运算符(C++)。
谨慎
在更改值和表达式之前,请确保了解后果。 一些可能的问题包括:
计算某些表达式可能会更改变量的值或以其他方式影响程序的状态。 例如,评估
var1 = ++var2
会更改var1
和var2
的值。 据说这些表达式具有副作用。 如果不知道副作用可能会导致意外结果。由于小数部分在转换为二进制时,对浮点值进行编辑可能会导致轻微误差。 即使是看似无害的编辑也可能导致浮点变量中的某些位发生更改。
在“自动”或“局部变量”窗口中搜索
你可以使用每个窗口上方的搜索栏,在“自动”或“局部变量”窗口的“名称”、“值”和“类型”列中搜索关键字。 按 Enter 或选择其中一个箭头来执行搜索。 若要取消正在进行的搜索,请在搜索栏中选择“x”图标。
分别使用向左和向右箭头(Shift+F3 和 F3)在找到的匹配项之间导航。
要使搜索更加彻底,请使用“自动”或“局部变量”窗口顶部的“深入搜索”下拉列表,选择要在嵌套对象中搜索的深度级别。
在“自动”或“局部变量”窗口中固定属性
备注
.NET Core 3.0 或更高版本支持此功能。
使用可固定属性工具,可以快速检查“自动”或“局部变量”窗口中对象的属性。 要使用此工具,请将鼠标悬停在某个属性上,并选择出现的固定图标,或右键单击并选择所显示上下文菜单中的“将成员固定到收藏夹”选项。 这会将该属性以气泡形式显示到该对象的属性列表顶部,并且属性名称和值会显示在“值”列中。 要取消固定属性,请再次选择固定图标,或在上下文菜单中选择“取消将成员固定到收藏夹”选项。
还可以在“自动”或“局部变量”窗口中查看对象的属性列表时切换属性名称和筛选出非固定属性。 可以通过选择“自动”或“局部变量”窗口上方工具栏中的按钮来访问每个选项。
更改“自动”或“本地”窗口的上下文
可以使用 调试位置 工具栏来选择所需的函数、线程或进程,从而更改 自动变量窗口 和 局部变量窗口 的上下文。
若要启用 调试位置 工具栏,请单击工具栏区域的空部分,然后从下拉列表中选择 调试位置,或选择 视图>工具栏>调试位置。
设置断点并开始调试。 命中断点后,执行将暂停,你可以在“调试位置”工具栏中看到 位置。
获取 AI 帮助
如果你有 Copilot,可以在查看“自动”或“局部变量”窗口或数据提示中的变量时获得 AI 帮助。 右键单击变量,并使用“询问 Copilot” 按钮。 在此方案中,Copilot 已经知道你的问题的上下文,因此你无需自己在聊天中提供上下文。 有关详细信息,请参阅使用 Copilot 进行调试。
“自动”窗口中的变量(C#、C++、Visual Basic、Python)
不同的代码语言在“自动”窗口中显示不同的变量。
在 C# 和 Visual Basic 中,“自动”窗口显示当前或前一行中使用的任何变量。 例如,在 C# 或 Visual Basic 代码中,声明以下四个变量:
public static void Main() { int a, b, c, d; a = 1; b = 2; c = 3; d = 4; }
在
c = 3;
行上设置断点,然后启动调试器。 当执行暂停时,“自动”窗口将显示:c
的值为 0,因为尚未执行行c = 3
。在 C++ 中,“自动”窗口将显示当前行(执行暂停的行)前面至少三行使用的变量。 例如,在C++代码中,声明六个变量:
void main() { int a, b, c, d, e, f; a = 1; b = 2; c = 3; d = 4; e = 5; f = 6; }
在行
e = 5;
设置断点并运行调试器。 当执行停止时,“自动”窗口将显示:变量
e
未初始化,因为尚未执行行e = 5
。
查看方法调用的返回值
在 .NET 和 C++ 代码中,当你单步跳过或单步跳出方法调用时,可以在“自动”窗口检查返回值。 查看方法调用返回值在未存储在局部变量中时非常有用。 方法可用作参数,也可以用作另一方法的返回值。
备注
从 Visual Studio 2022 版本 17.12 预览版 3 开始,还可以查看内联返回值,而不仅仅是在“自动”窗口中查看。
例如,以下 C# 代码添加两个函数的返回值:
static void Main(string[] args)
{
int a, b, c, d;
a = 1;
b = 2;
c = 3;
d = 4;
int x = sumVars(a, b) + subtractVars(c, d);
}
private static int sumVars(int i, int j)
{
return i + j;
}
private static int subtractVars(int i, int j)
{
return j - i;
}
若要查看“自动”窗口中 sumVars()
和 subtractVars()
方法调用的返回值:
在
int x = sumVars(a, b) + subtractVars(c, d);
行上设置断点。开始调试,且当执行在断点处暂停时,选择“单步跳过”或按 F10。 你应该在“自动”窗口中看到以下返回值: