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

  IntelliTrace 后退会在每一个断点处及调试器步骤事件发生时自动拍摄应用程序的快照。 凭借记录的快照即可以返回到上一个断点或步骤,并查看当时应用程序的状态。 若是但愿查看之前的应用程序状态,但不想从新启动调试或从新建立所需应用状态,使用 IntelliTrace 后退能够节省时间。html

  自 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 事件和快照模式

一、在 Visual Studio Enterprise 中打开项目。
二、打开“工具” > “选项” > “IntelliTrace”设置,或者 “调试”> “IntelliTrace”>“打开 IntelliTrace 设置”visual-studio

     

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

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

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

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

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

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

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

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

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

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

02 导航和查看快照

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

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

“后退”和“前进”按钮

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

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

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

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

三、还能够从“事件”选项卡查看快照 。若要执行此操做,请选择带有快照的事件,而后单击“激活历史调试” 。

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

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

 
相关文章
相关标签/搜索