Visual Studio 调试系列4 单步后退来检查旧应用状态(使用使用 IntelliTrace 窗口)

  IntelliTrace 后退会在每个断点处及调试器步骤事件发生时自动拍摄应用程序的快照。 凭借记录的快照便可以返回到上一个断点或步骤,并查看当时应用程序的状态。 如果希望查看以前的应用程序状态,但不想重新启动调试或重新创建所需应用状态,使用 IntelliTrace 后退可以节省时间。

  自 Visual Studio Enterprise 2015 版本、VS Enterprise2017 15.3 版本及更高版本起提供 IntelliTrace 后退功能,并且它需要 Windows 10 周年更新或更高版本。 当前支持将该功能用于调试 ASP.NET、WinForms、WPF、托管控制台应用和托管类库。 从 Visual Studio 2017 Enterprise 版本 15.7 开始,ASP.NET Core 和.NET Core 也支持该功能。 从 Visual Studio 2017 Enterprise 版本 15.9 预览版 2 开始,面向 Windows 的本机应用也支持该功能。 当前不支持调试 UWP 应用程序。

01 启用 IntelliTrace 事件和快照模式

1、在 Visual Studio Enterprise 中打开项目。 2、打开“工具” > “选项” > “IntelliTrace”设置,或者 “调试”> “IntelliTrace”>“打开 IntelliTrace 设置”

并选择“IntelliTrace事件和快照”选项 。 从 Visual Studio 2017 Enterprise 版本 15.9 预览版 2 开始,本选项为“IntelliTrace 快照(托管和本机)” 。

3、如果想要配置用于查看异常发生时的快照的选项,请从“选项”对话框选择“IntelliTrace” > “高级” 。

这些选项从 Visual Studio 2017 Enterprise 版本 15.7 开始提供。

启用事件和快照时,也默认启用异常发生时拍摄快照。 可以取消选中“在异常事件发生时收集快照”来禁用异常发生时拍摄快照 。 启用此功能后,可拍摄未处理异常的快照。 对于已处理的异常,只有在引发异常时且该异常不属于之前引发的异常的再次引发时才会拍摄快照。 从下拉列表中选择一个值,可以设置异常发生时拍摄的最大快照数。 每次应用进入中断模式时该最大值都适用(例如应用命中断点时)。

仅为 IntelliTrace 记录的异常事件拍摄快照。 对于托管代码,选择“工具” > “选项” > “IntelliTrace 事件”,可以指定 IntelliTrace 记录的事件 。

“IntelliTrace”选项页上的所有设置都针对 Visual Studio 这个整体,而不针对单个项目或解决方案。 这些设置中的更改适用于 Visual Studio 的所有实例、所有调试会话和所有项目或解决方案。

4、在项目中设置一个或多个断点并开始调试(按 F5),或通过逐步执行代码来启动调试(F10 或 F11) 。

IntelliTrace 在每个调试器步骤、断点事件和未处理异常事件发生时拍摄应用程序进程的快照。 这些事件和其他 IntelliTrace 事件一起记录在“诊断工具”窗口中的“事件”选项卡上 。 若要打开此窗口,请选择“调试” > “Windows” > “显示诊断工具” 。

快照功能可用的事件旁边会显示照相机图标。

由于性能原因,单步执行过快时不拍摄快照。 如果该步骤旁没有显示照相机图标,请尝试将单步执行速度放慢。

02 导航和查看快照

1、使用“调试”工具栏中的“后退”(Alt + [) 和“前进”(Alt + ]) 按钮,在事件间进行导航 。

这些按钮用于浏览“诊断工具”窗口中“事件”选项卡上显示的事件 。 后退或前进到某个事件会自动激活所选事件的历史调试

后退或前进时,Visual Studio 进入历史调试模式。 在此模式下,调试器上下文将切换到记录所选事件时的时间。 Visual Studio 还将指针移动到源窗口中的相应代码行。

在此视图中,可以检查“调用堆栈”、“局部变量”、“自动”以及“监视”窗口中的值 。 还可以在变量上悬停鼠标,以在“即时”窗口上查看数据提示并进行表达式求值 。 看到的数据源于在该时间点拍摄的应用程序进程的快照。

因此,举例来说,如果命中断点并执行步骤 (F10),则“后退”按钮将在断点对应的代码行上将 Visual Studio 置于历史模式 。

2、若要返回到实时执行,请在信息栏中选择“继续”(F5) 或单击“返回实时调试”链接 。

3、还可以从“事件”选项卡查看快照 。若要执行此操作,请选择带有快照的事件,然后单击“激活历史调试” 。

与“设置下一语句”命令不同,查看快照不会重新运行代码;它提供在过去发生的某个时间点的应用程序状态的静态视图 。

03 IntelliTrace 后退功能与 IntelliTrace 仅事件模式有何不同

仅事件模式下的 IntelliTrace 允许在调试器步骤发生时和断点处激活历史调试。 但是,IntelliTrace 只捕获已打开的“局部变量”和“自动”窗口中的数据,并且只捕获已展开的且在视图中的数据 。 在仅事件模式下,通常没有变量和复杂对象的完整视图。 此外,不支持在“监视”窗口中进行表达式求值和查看数据 。

在事件和快照模式下,IntelliTrace 捕获应用程序进程(包括复杂对象)的全部快照。 在代码行上,可以看到如同在断点处停止时看到的信息(且之前是否已展开信息并不重要)。 查看快照时,还支持表达式求值。

此功能对性能有何影响?

对总体单步执行性能的影响取决于应用程序。 拍摄快照大约耗用 30 毫秒。 拍摄快照时,为应用的进程创建分支且分支副本会挂起。 查看快照时,Visual Studio 将附加到进程的分支副本。 对于每个快照,Visual Studio 仅复制页表并将页设置为写入时复制。 如果堆上的对象在具有关联快照的调试器步骤之间更改,则将复制相应的页表,而产生最小的内存成本。 如果 Visual Studio 检测到拍摄快照内存不足,则不会拍摄。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java技术大本营

mybatis学习|下载并导入mybatis源码到idea

mybatis做为目前国内最为流行的开源orm框架,我们平时在使用时会感受到其带来的诸多便利,但是很少去深入分析,mybatis源码代码量不多,功能丰富,是一个...

26610
来自专栏测试技术圈

这可能是史上最易懂的 Spring Boot 入门教程

Spring Boot 是基于 Spring 框架基础上推出的一个全新的框架, 旨在让开发者可以轻松地创建一个可独立运行的,生产级别的应用程序。

29230
来自专栏PHP专享栏

登陆最新实现方式--一键登录

随着网络实名制的全面实施,服务方的实名认证压力越来越大,目前最简单的实名制实现方式便是绑定手机号码,使用手机号码进行认证。之所以采用手机号码认证呢,原因在于购入...

85620
来自专栏测试技术圈

Python快速入门(一)

Python作为一个,目前最火的编程语言之一,已经渗透到了各行各业。它易学好懂,拥有着丰富的库,功能齐全。人生苦短,就用Python。

10520
来自专栏大数据文摘

嗨起来!程序员的夜场,用实时编码生成音乐和灯光

也许你去过的夜店,负责hold住全场音乐的一般是个DJ,可能是一位帅气的小哥哥,或者是一位漂亮的小姐姐,左手扶着耳机,右手在打碟机上飞舞。

11320
来自专栏网络技术联盟站

全网最全思科命令大全,分类清晰,强烈建议收藏!

ip address 172.16.0.1 255.255.0.0 配置接口的ip 地址

21030
来自专栏小詹同学

受用一生的高效 PyCharm 使用技巧(五)

PyCharm 里代码块的折叠功能,相当的显眼,在代码编辑框的左侧,你可以发现有 + 也有 -,很容易理解 + 代表代码块被折叠了可以点此展开,而 - 代表这个...

8210
来自专栏DotNet程序园

微软发布了开发社区采用.NET Standard的最新信息

最近,微软发布了开发社区当前采用.NET Standard的最新信息。.NET Standard是API的正式规范,现有.NET实现在不同平台的是通用的(从而允...

10020
来自专栏PHP专享栏

手机号码校验系统流程

号码认证的系统交互流程主要分为三个步骤: 第一步,初始化 第二步,获取认证参数 第三步,发起认证

13970
来自专栏玩转JavaEE

一键部署 Spring Boot 到远程 Docker 容器,就是这么秀!

不知道各位小伙伴在生产环境都是怎么部署 Spring Boot 的,打成 jar 直接一键运行?打成 war 扔到 Tomcat 容器中运行?不过据松哥了解,容...

12830

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励