您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

Visual Studio 调试技巧之即时窗口的妙用

时间:2020-12-01 15:05:55  来源:  作者:

Visual Studio 调试技巧之即时窗口的妙用

 

在 Visual Studio 中有一个窗口叫 Immediate 窗口,中文版本应该叫即时窗口。默认会在你启动调试时在 VS 编辑器中弹出来。你也可以通过 Debug | windows | Immediate 或者使用快捷键 Ctrl+Alt+I 手动把它调出来。

Visual Studio 调试技巧之即时窗口的妙用

 

这个窗口很实用,尤其是在调试的时候。下面总结几个即时窗口的实用技巧。

临时运行C#代码

有时候你可能只想知道一句C#代码运行的结果,比如你突然想知道一个空数组调用Sum()方法会不会报错,或者想查看一下Math.PI的值。你不用傻傻地把测试代码写在项目里,设个断点,然后把项目跑起来查看。你可以在即时窗口中直接写C#代码,然后按回车即可。比如输入:

Console.WriteLine("Welcome!")

回车运行:

Visual Studio 调试技巧之即时窗口的妙用

 

再如,你可以直接输入 Math.PI 等表达式和调用某些方法:

Visual Studio 调试技巧之即时窗口的妙用

 

也可以用 VS 的另外一个窗口 View | Other Windows | C# Interactive 来实现个功能。如果只是为了临时运行 C# 代码块,则C# Interactive 会更好用些。两者使用有些区别,C# Interactive 打印内容需要手动调用 Console.Write 等方法:

Visual Studio 调试技巧之即时窗口的妙用

 

调试时调用任何方法

假如你正在调试一个方法,你临时测试一下这个方法对于不同的参数的执行过程或运行结果。比如对于这样一段代码:

class Program
{
    static void Main(string[] args)
    {
        var foo = new Foo();
        var result = foo.Add(1, 2, 3);
        Console.WriteLine(result);
    }
}

public class Foo
{
    public int Add(params int[] nums)
    {
        if (nums?.Length < 1)
            return 0;
        var result = 0;
        foreach (var n in nums)
        {
            // ...(其它代码)
            result += n;
        }
        return result;
    }
}

若想用不同的参数来测试foo.Add方法的运行情况,普通的做法是启动多次调试,每次调试都修改一下调用代码 foo.Add 的参数。使用即时窗口,你可以在方法调用处打个断点。然后在即时窗口编写调用代码,它会直接使用当前上下文进行调试。不需要中断 VS 调试再重新启动。

Visual Studio 调试技巧之即时窗口的妙用

 

另外,在即时窗口可以调用私有方法,也就是说它不受方法的访问权限限制。

Visual Studio 调试技巧之即时窗口的妙用

 

不过,在即时窗口编写调用私有方法的代码时是没有智能提示的。

使方法执行不影响上下文

默认情况下,在即时窗口运行的代码,执行完后会对上下文产生副作用(Side Effect)。比如对于这样一段代码:

class Program
{
    static void Main(string[] args)
    {
        var foo = new Foo();
        Console.WriteLine();
    }
}

public class Foo
{
    public int Num { get; private set; }
    public int Increase()
    {
        return ++Num;
    }
}

在即时窗口中调用foo.Increase后,Num 的变化如下:

Visual Studio 调试技巧之即时窗口的妙用

 

但很多时候我们只希望即使窗口只是临时运行一下调试代码,不想让它真修改上下文的状态。我们只需在表达式后面添加 , nse(no side effect 的简写)即可:

Visual Studio 调试技巧之即时窗口的妙用

 

加上 nse 后,执行的那句代码相当于在一个沙箱中运行,和上下文互不干扰。

访问特殊变量

Visual Studio 在调试过程中有一些特殊的变量,可以在即时窗口打印它们的值。这些特殊的变量以 $ 作为前缀,通过智能提示可以看到目前有三个这样的特殊变量:

  • $exception,当前的异常信息。有时候在调试时,你代码的 try/catch 语句没有给 catch 语句使用 Exception 参数,则可以在即使窗口使用该特殊变量打印异常信息。
  • $returnvalue,当前语句的返回值。有时候你在代码中调用了一个方法,但你并没有用一个变量来存储这个方法的返回值,而你在调试时又想知道它的返回值。此时你可以在方法执行处添加一个断点。当运行到该断点时,按 F10,然后在即时窗口可以通过 $returnvalue 打印该方法的返回值。
  • $user,可以用来获取当前登录操作系统的用户信息和当前运行的进程和线程信息。这个我也没用过,官方文档介绍也比较简单,也不知道这个特殊变量包含哪些成员。直接打印是这样的:

结束

本文分享的这几个即时窗口的技巧,在调试时很实用,在工作中我经常使用,希望它也可以帮助你提高开发效率。关于调试,VS 还有其它好用的工具或技巧,比如有一个 Watch(监视)窗口,如果调试时要频繁查看一个对象的值,使用监视窗口比即时窗口方便很多。

当然,还是希望大家自己去探索更多的技巧,以做到能更高效灵活地使用 VS 这个强大的编辑器。

 



Tags:Visual Studio   点击:()  评论:()
声明:本站部分内容来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除,谢谢。
▌相关评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
▌相关推荐
在 Visual Studio 中有一个窗口叫 Immediate 窗口,中文版本应该叫即时窗口。默认会在你启动调试时在 VS 编辑器中弹出来。你也可以通过 Debug | Windows | Immediate 或者...【详细内容】
2020-12-01   Visual Studio  点击:(11)  评论:(0)  加入收藏
Codejock软件公司的Xtreme Toolkit Pro是一种VC界面库,MFC开发中最全面界面控件套包,它提供了Windows开发所需要的11种主流的Visual C++ MFC控件,包括Command Bars、Controls、...【详细内容】
2020-09-03   Visual Studio  点击:(5)  评论:(0)  加入收藏
来源:https://www.oschina.net/news/117212/vs2019-16-7-pre4简介首先,Visual Studio 不是一个开源软件,是商业软件,提供免费的社区版本。Microsoft Visual Studio(简称VS)是美国...【详细内容】
2020-07-16   Visual Studio  点击:(8)  评论:(0)  加入收藏
在这篇文章中,我们假定读者了解VS基本的调试知识,如: F5 开始使用调试器运行程序 F9 在当前行设置断点 F10 运行到下一个断点处 F5 从被调试的已停止程序恢复执行 F11 步进到...【详细内容】
2020-07-09   Visual Studio  点击:(3)  评论:(0)  加入收藏
Visual Studio代码扩展入门:用于C/C++静态分析的VS Code配置在此文章中,我将与您分享一些有关为Visual Studio Code编辑器配置和使用我们全新的C/C++test静态分析扩展的提示。...【详细内容】
2020-06-19   Visual Studio  点击:(82)  评论:(0)  加入收藏
Visual Studio Code下载与安装Visual Studio Code是微软推出的一款开源、跨平台(Windows,Ubuntu,macOS)的编辑器,这里使用它来编写C语言的源代码,当然除了编写C代码之外,还可以...【详细内容】
2019-12-23   Visual Studio  点击:(56)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条