Visual Studio Enterprise 2019时间旅行调试简介

马克·唐尼

Visual Studio Enterprise 2019中的时间旅行调试(TTD)预览提供了记录Azure虚拟机(VM)上运行的Web应用程序的功能,然后准确地重建和重播执行路径。TTD与我们的快照调试器提供并允许您将每行代码倒带和重放任意次数,帮助您隔离和识别可能只在生产环境中发生的问题。

最有效的调试通常发生在我们所称的“内部循环”中。当您在本地检查和调试代码时,在您进行版本控制之前。我们在内部循环开发期间遇到的问题通常更容易理解和诊断,因为它们是可访问和可重复的。

今天,我们很高兴地宣布在VisualStudioEnterprise中发布时间旅行调试(TTD)。使用TTD,我们可以记录生产中执行的代码,并在VisualStudio中重播执行路径。TTD还使您能够在时间上向前和向后移动,就像您在本地执行“内部循环”调试一样。您还可以访问重要的调试功能,如局部变量和调用堆栈。

今天的调试器通常允许您在特定的断点处停止整个进程,然后只继续前进。即使有更多高级调试工具,如IntelliTrace,您可以在离散的时间段记录事件和数据。与快照、日志记录或崩溃转储文件相比,TTD具有显著的优势,因为这些方法通常缺少导致最终失败或错误的执行路径的确切细节。

什么是时间旅行调试?

时间旅行调试(TTD)是一种反向调试解决方案,允许您记录应用程序或进程中代码的执行,并向前和向后回放。TTD改进了调试,因为您可以及时返回以更好地了解导致特定错误的条件。此外,您可以多次重播,以了解如何最好地解决问题。TTD技术最近在WinDbg的预览版本中引入,用于本机代码场景.

我们已经延长了快照调试器使用TTD,您可以在应用程序执行时对其进行记录。然后,该录音可以在Visual Studio 2019 Enterprise中回放,在那里您可以根据需要多次回放每一行代码。TTD在线程上记录与捕捉点条件匹配的内容,通常会一直运行到方法结束。如果在捕捉点之后但在方法结束之前有一个“等待”,我们将停止记录等待发生的位置。此功能将在带有上线许可证的Visual Studio 2019版本中预览。我们计划在未来的更新中添加更多的TTD场景。

TTD入门

可以在运行Windows操作系统的Azure虚拟机的最新版本的Visual Studio Enterprise 2019中启用时间旅行调试预览ASP。净值(4.8+).

安装最新版本的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的虚拟机。

立即试用TTD!

我们对这个预览功能如何帮助增强您在Azure中的调试体验感到非常兴奋,但这仅仅是一个开始。我们的团队继续设计和构建额外的TTD功能,我们计划在即将发布的Visual Studio版本中添加这些功能。

我们期待您通过我们的开发者社区和反馈中心提供反馈,您可以帮助我们优先考虑要做出哪些改进,因为我们真正重视您提供的所有反馈。

11条评论

讨论结束。登录以编辑/删除现有评论。

  • 伊恩·谢泼德(伊舍弗) 0

    它在Azure应用程序服务上不起作用吗?

    • 马克·唐尼Microsoft员工 0

      嗨,Iain,时间旅行调试预览版目前只针对Azure虚拟机,但随着我们开发此功能,我们计划扩展到其他Azure场景,包括应用程序服务。

  • 德里克·布劳顿 0

    A.迷宫。25年前,我可以在IBM大型机上做到这一点。

    • 马克·唐尼Microsoft员工 0

      你好,Derek,与时间旅行调试相关的概念已经存在了一段时间,我们很高兴能够将其引入Azure云。

  • 詹姆斯·查尔德科特 0

    对于那些使用Azure的人来说,这看起来很酷。对于像我这样使用桌面应用程序的人,这里有一些关于在本地使用WinDbg版本TTD的信息。Net Framework/核心应用程序:
    https://devblogs.microsoft.com/dotnet/debugging-net-apps-with-time-travel-debugging-ttd/
    我还没有试过,但它看起来很棒。

  • 凯文·冈恩 0

    好东西!
    作为一个在App Insights中广泛使用Snapshot Debugging的开发团队,我们热切地等待着App Services的到来。

  • 伊恩·塞奇斯 0

    是否有多云支持(GCP、AWS)的路线图? 

    • 马克·唐尼Microsoft员工 0

      你好,伊恩

      我们当前的功能重点将仅限于Azure场景。谢谢!

  • michael@pcmac.org网站 0

    reoadmap是否包含IIS/Apache上的web应用。净核心?

    • 马克·唐尼Microsoft员工 0

      你好,迈克尔,

      我们当前的支持包括IIS和。NET 4.8,今后我们还将计划支持。NET核心3+。

  • 亚当·普洛彻 0

    这很酷。有没有计划允许在运行IIS(没有Azure)的标准Windows Server上使用此功能?

反馈usabilla图标