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

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

1. 临时运行C#代码

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

Console.WriteLine("Welcome!")

回车运行:

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

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

2. 调试时调用任何方法

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

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 调试再重新启动。

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

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

3. 使方法执行不影响上下文

默认情况下,在即时窗口运行的代码,执行完后会对上下文产生副作用(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 的变化如下:

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

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

4. 访问特殊变量

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

  • $exception,当前的异常信息。有时候在调试时,你代码的 try/catch 语句没有给 catch 语句使用 Exception 参数,则可以在即使窗口使用该特殊变量打印异常信息。

  • $returnvalue,当前语句的返回值。有时候你在代码中调用了一个方法,但你并没有用一个变量来存储这个方法的返回值,而你在调试时又想知道它的返回值。此时你可以在方法执行处添加一个断点。当运行到该断点时,按 F10,然后在即时窗口可以通过 $returnvalue 打印该方法的返回值。

  • $user,可以用来获取当前登录操作系统的用户信息和当前运行的进程和线程信息。这个我也没用过,官方文档介绍也比较简单,也不知道这个特殊变量包含哪些成员。直接打印是这样的:

结束

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

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

-

精致码农

带你洞悉编程与架构

↑长按图片识别二维码关注,不要错过网海相遇的缘分

Visual Studio 即时窗口实用技巧相关推荐

  1. Visual Studio [即时窗口] [命令窗口] (Immediate Window Command Window) 转

    打开[即时窗口] 1) Shortcut Ctrl+D, I 2) Menu 3) 在[命令窗口]输入immed 打开[命令窗口] 1) Shortcut Ctrl+W, A 2) Menu 3) 在 ...

  2. Visual Studio调试之断点技巧篇

    不知道能不能算是技巧啦,写出来放到首页贻笑大方而已. 函数断点 在前面的文章Visual Studio调试之避免单步跟踪调试模式里面我讲了如何设置函数断点,说实话,我个人喜欢设置函数断点,而不是在代码 ...

  3. Visual Studio的奇淫技巧,你知道多少?

    如果你像我一样,或许你也沉迷于开发者工具.这就是我喜欢 Visual Studio 的原因之一--它有无数的生产力技巧. 这篇文章将展示五个这样的技巧,这些技巧对我每天的工作都有帮助.请注意,这些仅适 ...

  4. visual studio 编辑器窗口分屏

    今天发现了 visual studio 的编辑器窗口还可以玩分屏,也就是开两个编辑器,这样开发起来效率更高,特地记录一下. 效果入下: 发现其他提高开发效率的方法后再来更新. 更多有关提高 visua ...

  5. Visual Studio 输出窗口有乱码

      VS中,output 窗口出现乱码(黑色方片,一堆问号),查看网上各种教程都不好用,修改时区,编码方式,修改 vs 为英文,都不行.   最后发现,启动 Visual Studio Install ...

  6. Visual Studio 2008 使用小技巧

    节选自 Visual Studio 2008 每日提示 #001 注意增量搜索的威力 原文链接: http://blogs.msdn.com/saraford/archive/2007/07/23/d ...

  7. C语言--visual studio 2019使用小技巧(番茄助手的代码提示)

    visual studio 2019的快捷键使用这里就不讲了,网上一搜一大堆.这里讲一下如何快速写整块的代码,省得我们在测试小案例的时候写那些重复的代码,比如#include <stdio.h& ...

  8. Visual Studio开发工具----调试技巧-转储文件

    3.10 转储文件 3.10.1 概述        转储文件是一个快照,它显示正在执行的进程和某个时刻为应用程序加载的模块.转储文件带有堆信息的转储还包括应用程序在该点的内存快照.        在 ...

  9. Visual Studio 2008的使用技巧

    1 VS2008把原来的Tab空格设置为空格符号 设置Tab的空格缩进:Tools-Options-Text Editor,如果编写C/C++程序就打开C/C++-Tabs,在这里选中"In ...

最新文章

  1. Android WebView访问SSL证书网页(onReceivedSslError)
  2. 庄闲分析软件安卓版_关于公布湖南省2020年第七批软件产品评估结果的通知
  3. input file上传图片预览
  4. CSS中的URL_CSS中的URI
  5. 特殊用法(AHB写)
  6. Java21天打卡Day7-循环
  7. 【JAVA笔记】线程(1):多线程的介绍和实现
  8. matlab实现2dpsk调制与解调,(完整版)matlab设计2DPSK信号调制与解调
  9. 从零打造Android计算器(安卓开发初体验)
  10. 怎么开启计算机的无线网络,笔记本怎么开启无线投屏
  11. 五、应用程序与驱动程序交互(缓冲模式)
  12. 管螺纹如何标注_【专业知识】一次搞全所有螺纹常识,很基础
  13. 新形势下国家医疗保障局信息化建设注意点(二)标准先行
  14. python编程语言在线编译手机_groovy在线运行,groovy在线编译,支持手机在线编程写代码 - Groovy教程...
  15. 一款自制的视频录制软件
  16. IE无法安装HP-QC插件
  17. JS基礎:Hoisting 變量提升、TDZ 暫時性死區(Temporal Dead Zone)
  18. 【YOLOv4原文+翻译】YOLOv4:Optimal Speed and Accuracy of Object Detection
  19. opencv2413 gpu mog2_gpu CascadeClassifier_GPU
  20. 项目管理工具之Git/GitHub/Gitee/Gitlab

热门文章

  1. 分布式锁的几种实现原理
  2. springboot小笔记
  3. 面象对象设计原则之六:迪米特原则(LeastKnowledge Principle, LKP)
  4. 扼杀 304,Cache-Control: immutable
  5. 浅谈Java多线程同步机制之同步块(方法)——synchronized
  6. tasker使用手册_如何开始使用Tasker调整Android手机
  7. macbook图形化编程_如何判断MacBook使用的是哪种图形芯片(并进行切换)
  8. 洛谷P5055 【模板】可持久化文艺平衡树(FHQ Treap)
  9. python基础知识-8-三元和一行代码(推导式)
  10. ubuntu 16.04(Windows 10双系统+grub引导)无法进入tt1~tt6(NVIDIA驱动安装相关-黑屏,login loop,分辨率)...