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 检测到拍摄快照内存不足,则不会拍摄。

IntelliTrace 详细信息与使用功能,请参考:https://docs.microsoft.com/zh-cn/visualstudio/debugger/intellitrace-features?view=vs-2019

 

Visual Studio 调试系列4 单步后退来检查旧应用状态(使用使用 IntelliTrace 窗口)的更多相关文章

  1. Visual Studio 调试 ---- 系列文章

    调试是软件开发过程中非常重要的一个部分,它具挑战性,但是也有一定的方法和技巧. Visual Studio 调试程序有助于你观察程序的运行时行为并发现问题. 该调试器可用于所有 Visual Stud ...

  2. Visual Studio 调试系列6 监视变量(使用监视窗口和快速监视窗口)

    系列目录     [已更新最新开发文章,点击查看详细] 当你进行调试时,可以使用 监视窗口 和 快速监视窗口 来监视变量和表达式. 仅在调试会话期间,这两个窗口才可用. 监视窗口可以在调试时一次显示多 ...

  3. Visual Studio调试之避免单步跟踪调试模式

    Visual Studio调试之避免单步跟踪调试模式 写完Visual Studio调试之断点进阶篇之后,想分享一下我常用的一些调试技巧,后面发现写之前,一些背景知识需要介绍一下. 下面是几篇今年2月 ...

  4. Visual Studio 调试系列12 远程调试部署在远程计算机IIS上的ASP.NET应用程序

    系列目录     [已更新最新开发文章,点击查看详细] 要调试已部署到IIS的ASP.NET应用程序,请在部署应用程序的计算机上安装并运行远程工具,然后从Visual Studio附加到正在运行的应用 ...

  5. Visual Studio 调试系列9 调试器提示和技巧

    系列目录     [已更新最新开发文章,点击查看详细] 01 固定数据提示 如果你在调试时,经常将鼠标悬停在数据提示上,就可能想固定变量的数据提示,方便自己随时查看. 即使在重新启动后,固定的变量也能 ...

  6. Visual Studio 调试系列10 附加到正在运行的进程

    系列目录     [已更新最新开发文章,点击查看详细] 可将 Visual Studio 调试器附加到本地或远程计算机上正在运行的进程. 进程运行后,在 Visual Studio 中选择“调试” & ...

  7. Visual Studio 调试系列2 基本调试方法

    系列目录     [已更新最新开发文章,点击查看详细] 在 Visual Studio 上下文中,当调试应用时,这通常意味着你在附加了调试器的情况下(即在调试器模式下)运行应用程序. 执行此操作时,调 ...

  8. Visual Studio 调试系列1 Debug 与 Release 模式

    系列目录     [已更新最新开发文章,点击查看详细] Debug 模式 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序. 在Debug模式下调试,可以在断点处看到 ...

  9. Visual Studio 调试系列11 远程调试

    系列目录     [已更新最新开发文章,点击查看详细] 你可以调试已部署在另一台计算机的 Visual Studio 应用程序. 要进行此操作,可使用 Visual Studio 远程调试器. 01 ...

随机推荐

  1. mybatis批量更新出现he error occurred while setting parameters

    当你更新一条时,不会发生问题,但是执行多条就出现了错误原因是mysql 配置jdbc:driver 应该添加&allowMultiQueries=trueurl:jdbc:mysql://lo ...

  2. 机器学习(六)--------神经网络(Neural Networks)

    无论是线性回归还是逻辑回归都有这样一个缺点,即:当特征太多时, 计算的负荷会非常大. 比如识别图像,是否是一辆汽车,可能就需要判断太多像素. 这时候就需要神经网络. 神经网络是模拟人类大脑的神经网络, ...

  3. 基于opencv 识别、定位二维码 (c++版)

    前言 因工作需要,需要定位图片中的二维码:我遂查阅了相关资料,也学习了opencv开源库.通过一番努力,终于很好的实现了二维码定位.本文将讲解如何使用opencv定位二维码. 定位二维码不仅仅是为了识 ...

  4. Python - 数据结构 - 第十五天

    Python 数据结构 本章节我们主要结合前面所学的知识点来介绍Python数据结构. 列表 Python中列表是可变的,这是它区别于字符串和元组的最重要的特点,一句话概括即:列表可以修改,而字符串和 ...

  5. WPF数据模板(7)

    数据模板常用在3种类型的控件, 下图形式: 1.Grid这种列表表格中修改Cell的数据格式, CellTemplate可以修改单元格的展示数据的方式. 2.针对列表类型的控件, 例如树形控件,下拉列 ...

  6. 千万级MySQL数据库建立索引,提高性能的秘诀

    实践中如何优化MySQL 实践中,MySQL的优化主要涉及SQL语句及索引的优化.数据表结构的优化.系统配置的优化和硬件的优化四个方面,如下图所示: SQL语句及索引的优化 SQL语句的优化 SQL语 ...

  7. Redis操作篇(二)

    redis的发布与订阅,主从架构,哨兵架构,cluster集群 下载编译安装redis # 1. 下载redis wget http://download.redis.io/releases/redi ...

  8. javascript 关于赋值、浅拷贝、深拷贝的个人理解

    关于赋值.浅拷贝.深拷贝,以前也思考良久,很多时候都以为记住了,但是,我太难了.今天我特地写下笔记,希望可以完全掌握这个东西,也希望可以帮助到任何想对学习这个东西的同学. 一.栈.堆.指针地址 栈内存 ...

  9. python3匿名函数

    当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便. 在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时,除了定义一个f(x)的函数外, ...

  10. Java使用MD5加盐进行加密

    Java使用MD5加盐进行加密    我使用的方法是导入了md5.jar包,就不需要再自己写MD5的加密算法了,直接调用方法即可 点击下载md5包 import com.ndktools.javamd ...