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

140

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

如何使用立即窗口?


如果您正在参考单个 Visual Studio 命令问题,请查看 [Immediate Window][1] 的示例。其中展示了如何通过立即窗口评估表达式、执行语句、打印变量值等等。[1]:http://msdn.microsoft.com/zh-cn/library/f177hahy(VS.80).aspx - TStamper
2
有一些特殊的命令很难找到列表。http://msdn.microsoft.com/en-us/library/ms171362(v=vs.100).aspx Windbg 的一些功能是可用的。曾经可以根据地址找到最近的符号。(ln) 我认为这个功能已经被愚蠢地关闭了。我很想拥有windbg的dt命令来显示结构体中的类型等。至少你可以输入一个对象变量,以获取所有成员及其值的列表。(而不是尝试玩开一个节点关闭一个节点的游戏。) - kalbr
对于Visual Studio 2017,相关文档的链接为https://learn.microsoft.com/en-us/visualstudio/ide/reference/immediate-window - Pac0
3个回答

149

Visual Studio中即时窗口的一个不错的功能是它能够评估方法的返回值,特别是当它被您的客户端代码调用但它不是变量赋值的一部分。在Debug模式下,正如之前提到的,您可以与内存中的变量交互并执行表达式,这在能够做到这一点方面起着重要作用。

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

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 可以在即时窗口中使用,但有时会有一些不一致性。据我的经验,它似乎只能在调试模式下使用,而在设计、非调试模式下则无法使用。

不幸的是,即时窗口还不能支持循环。


2
你如何找到即时窗口? - jpaugh
5
按下Ctrl + Alt + I或打开_Debug -> Windows -> Immediate_以将文本翻译成中文。 - Ray

15

使用即时窗口执行命令

即时窗口也可以用来执行命令。只需输入一个>,然后跟上命令。

输入图像描述

例如,>shell cmd将启动一个命令窗口(这可以用于检查传递给Visual Studio的环境变量,例如)。>cls将清除屏幕。

以下是一些常用命令及其别名:https://msdn.microsoft.com/zh-cn/library/c3a0kd3x.aspx


2
不错的技巧。实际上,这个技巧很好地结合了我使用的另一个技巧:>open Filename会在解决方案中打开所选文件,并且还具有文件名自动完成功能。 - Phillip Ngan

11

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

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

enter image description here

以下是一个使用即时窗口的示例:

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();}

添加断点

enter image description here

调用命令

enter image description here

https://msdn.microsoft.com/en-us/library/f177hahy.aspx


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接