如何在Visual Studio中使用立即窗口?


121

立即窗口是调试应用程序的非常有用的工具。它可用于执行在断点上下文中有效的代码语句并检查值。我还使用它来键入代码片段以学习语言功能。

您如何使用即时窗口?


如果您指的是发出单个Visual Studio命令,请查看[立即窗口] [1]作为示例。该示例显示了如何通过即时窗口求值表达式,执行语句,打印变量值等。[1]:msdn.microsoft.com/en-us/library/f177hahy
VS.80).aspx

2
有一些特殊的命令很难找到。msdn.microsoft.com/zh-cn/library/ms171362(v=vs.100).aspx windbg的某些功能可用。曾经能够在给定地址的情况下找到最近的符号。(ln)我认为这被愚蠢地关闭了。我很乐意使用windbg的dt命令在结构等中显示类型。至少您可以键入一个对象变量,以获取列表中所有成员及其值。(而不是尝试玩打开节点关闭节点的游戏。)
kalbr

对于Visual Studio 2017,相关文档的链接是docs.microsoft.com/en-us/visualstudio/ide/reference/…–
Pac0

Answers:


130

Visual Studio中“即时窗口”的一个不错的功能是它能够评估方法的返回值,特别是如果它是由客户端代码调用的,但它不是变量赋值的一部分。如前所述,在调试模式下,您可以与变量交互并在内存中执行表达式,这对于执行此操作起着重要作用。

例如,如果您有一个静态方法返回两个数字的和,例如:

private static int GetSum(int a, int b)
{
    return a + b;
}

然后,可以在立即窗口中键入以下内容:

? GetSum(2, 4)
6

如您所见,这对于静态方法非常有效。但是,如果该方法是非静态的,则需要与对该方法所属的对象的引用进行交互。

例如,假设您的班级是这样的:

private class Foo
{
    public string GetMessage()
    {
        return "hello";
    }
}

如果对象已经存在于内存中并且在范围内,那么只要当前断点之前(或至少在调试模式下暂停代码的任何位置之前)已实例化该对象,就可以在“即时窗口”中调用该对象:

? foo.GetMessage(); // object ‘foo’ already exists
"hello"

此外,如果要直接交互并测试该方法而不依赖于内存中的现有实例,则可以在“即时窗口”中实例化自己的实例:

? Foo foo = new Foo(); // new instance of ‘Foo’
{temp.Program.Foo}
? foo.GetMessage()
"hello"

如果您想进行进一步的评估,计算等,则可以更进一步,并暂时将方法的结果分配给变量:

? string msg = foo.GetMessage();
"hello"
? msg + " there!"
"hello there!"

此外,如果您甚至不想为新对象声明变量名,而只想运行其方法/函数之一,请执行以下操作:

? new Foo().GetMessage()
"hello" 

查看方法值的一种非常常见的方法是选择类的方法名称并执行“添加监视”,以便您可以在“监视”窗口中查看其当前值。但是,再次需要实例化对象并在范围上显示有效值。与使用立即窗口相比,它的功能要弱得多,限制要大得多。

除了检查方法外,您还可以执行简单的数学方程式:

? 5 * 6
30

或比较值:

? 5==6
false
? 6==6
true

如果您直接位于“即时窗口”中,则不需要问号('?'),但为了清楚起见,在此处包括了问号(以区分表达式中的键入内容与结果。)但是,如果您位于命令窗口中并且需要在立即窗口中做一些快速的操作,然后在语句前加上“?” 然后离开。

Intellisense在“即时窗口”中运行,但有时可能会有些不一致。以我的经验,它似乎仅在调试模式下可用,而在设计非调试模式下不可用。

不幸的是,立即窗口的另一个缺点是它不支持循环。


1
您如何找到即时窗口?
jpaugh

1
Ctrl + Alt + IDebug->
Ray

11

使用立即窗口执行命令

立即窗口也可以用来执行命令。只需键入a,>然后输入命令即可。

在此处输入图片说明

例如,>shell cmd将启动命令外壳程序(例如,这对于检查将哪些环境变量传递给Visual Studio很有用)。>cls将清除屏幕。

以下是常用命令的列表,它们具有自己的别名:https : //msdn.microsoft.com/zh-cn/library/c3a0kd3x.aspx


2
不错的提示。实际上,这与我使用的另一个技巧很好地结合在一起:>open Filename将在解决方案中打开所选文件,甚至具有文件名补全功能。
菲利普·恩甘

6

“即时”窗口用于调试和评估表达式,执行语句,打印变量值等。它允许您在调试期间输入要由开发语言评估或执行的表达式。

要显示立即窗口,请选择“调试”>“ Windows”>“立即”,或按Ctrl-Alt-I

在此处输入图片说明

这是立即窗口的示例:

int Sum(int x, int y) { return (x + y);}
void main(){
int a, b, c;
a = 5;
b = 7;
c = Sum(a, b);
char temp = getchar();}

添加断点

在此处输入图片说明

呼叫指令

在此处输入图片说明

https://msdn.microsoft.com/zh-CN/library/f177hahy.aspx

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.