Visual Studio Enterprise 2019中的时间旅行调试(TTD)预览功能提供了记录在Azure虚拟机(VM)上运行的Web应用程序的功能,然后可以准确地重建和重播执行路径。 TTD与我们的Snapshot Debugger产品集成在一起,使您可以按需要多次回放和重播每行代码,从而帮助您隔离和识别仅在生产环境中可能出现的问题。

博客中的这篇文章最有效的调试类型通常发生在我们所谓的“内部循环”中。 在进行版本控制之前,当您在本地检查和调试代码时。 我们在内循环开发过程中遇到的问题通常更容易理解和诊断,因为它们是可访问且可重复的。
今天,我们很高兴宣布Visual Studio Enterprise中的时间旅行调试(TTD)版本。 使用TTD,我们可以记录生产中执行的代码并在Visual Studio中重播执行路径。 TTD还使您能够及时向前和向后移动,就好像您在本地执行“内部循环”调试一样。 您还可以访问重要的调试功能,例如本地语言和调用堆栈。
当今的调试器通常允许您暂停整个过程,然后再继续前进,从而在特定的断点处停止。 即使使用IntelliTrace之类的更高级的调试工具 ,您也可以在不连续的时间记录事件和数据。 与快照,日志记录或故障转储文件相比,TTD具有显着优势,因为这些方法通常缺少导致最终故障或错误的执行路径的确切细节。
什么是时间旅行调试?
时间旅行调试(TTD)是一种反向调试解决方案,它使您可以记录应用程序或进程中代码的执行情况,并向前和向后回放它们。 TTD改进了调试功能,因为您可以及时返回以更好地了解导致特定错误的条件。 此外,您可以多次重播它以了解如何最好地解决该问题。 最近,在本机代码方案的WinDbg预览版中引入了TTD技术 。
我们使用TTD扩展了快照调试器 ,以允许您在应用程序执行时对其进行记录。 然后可以在Visual Studio 2019 Enterprise中回放该录音,您可以在其中回放和回放每行代码任意多次。 TTD会在与快照点条件匹配的线程上进行记录,并且通常会一直运行到方法结束。 如果在快照点之后但在方法结束之前存在“等待”,我们将停止记录发生等待的位置。 具有实时许可证的Visual Studio 2019版本将在预览中使用此功能。 我们计划在将来的更新中添加更多的TTD方案。
TTD入门
可以在运行ASP.NET(4.8+)的Windows操作系统上针对Azure虚拟机的最新版本的Visual Studio Enterprise 2019中启用时间旅行调试预览。
安装最新版本的Visual Studio Enterprise之后,请完成以下步骤:
1.打开您想进行时间旅行调试的项目-确保您具有与发布到Azure虚拟机的源代码相同的版本。
2.选择“ 调试”>“附加快照调试器”,然后选择将项目与Azure存储帐户一起部署到的Azure虚拟机。 首次尝试连接时,将需要安装Snapshot Debugger网站扩展。
3.选择“ 时间旅行调试”选项,然后单击“ 附加” 。 一旦Visual Studio处于快照调试器模式,它将能够使用TTD进行记录。

4.创建一个快照点并将其配置为启用时间旅行调试。 单击“ 开始\更新集合” 。

5.收集快照后 ,单击“ 查看快照”,然后可以使用命令栏在记录的方法中前进和后退。

TTD预览限制
在TTD的初始预览阶段,我们将支持在Azure虚拟机(VM)上运行的AMD64 Web应用程序。 我们希望记录会为您正在运行的进程增加大量开销,并根据进程大小和活动线程数减慢其速度。 我们还预计在以下某些情况下会降低调试体验:-
- 在GC压缩阶段。
- 逐步执行优化的方法,例如,当您进入不包含快照点的方法时。
- 如果您的应用程序在内部加载或卸载应用程序域。
- 记录仅发生在由快照点触发的线程上,随后影响备用线程的代码也将降级。
请注意:我们也不会记录异步因果关系链。
在预览测试期间,我们发现TTD文件的大小从几百兆字节到几千兆字节不等,具体取决于会话持续的时间和Web应用程序运行的时间。 但是,一旦Snapshot Debugger会话结束并且启动了应用程序池回收,将清除由TTD创建的文件。 对于我们的预览版,我们还建议使用至少8GB RAM的VM。
立即尝试TTD!
我们对于此预览功能如何帮助您增强Azure中的调试体验感到非常兴奋,但这仅仅是开始。 我们的团队将继续设计和构建其他TTD功能,我们计划在即将发布的Visual Studio版本中添加这些功能。
我们希望通过我们的开发者社区和反馈中心获得您的反馈,因为我们真正重视您提供的所有反馈,因此可以帮助我们确定需要改进的优先级。

Visual Studio生产诊断程序经理