使用时间旅行调试功能在 Azure 虚拟机上记录和重播 ASP.NET 应用程序

注释

快照调试已弃用,在最新版本的 Visual Studio 2022 及更高版本中将不再可用。 虽然没有确切的替换,但还有其他工具可以提供有用的诊断:

Visual Studio Enterprise 中的时间旅行调试可以记录在 Azure 虚拟机(VM)上运行的 Web 应用,然后准确重新构造和重播执行路径。 时间旅行调试(TTD)已作为预览功能添加到 Visual Studio 2019 Enterprise 中,现已集成到 Visual Studio Snapshot Debugger 中。

使用时间旅行调试功能,您可以任意多次回放和重播每行代码。 此过程可以帮助你隔离和识别仅在生产环境中可能发生的问题。

捕获时间旅行调试录制不会停止您的应用程序,但会给正在运行的进程带来显著的额外负担。 速度放缓取决于进程大小和活动线程数等因素。

在本教程中,你将:

  • 使用 TTD 启动快照调试器。
  • 设置捕捉点并收集时间旅行的记录。
  • 调试时光旅行录音。

先决条件

  • 安装了 Azure 开发工作负载Visual Studio Enterprise 2019 或更高版本

    在 Visual Studio 安装程序中,确保在“单个组件”选项卡上的“调试和测试”下选择了“快照调试器”。

  • 在 Azure VM 上的 .NET Framework 4.8 或更高版本上运行的 ASP.NET (AMD64) Web 应用。

附加快照调试器

  1. 打开要调试的应用的项目。

    重要

    请确保打开发布到 Azure VM 的相同版本的源代码。

  2. 选择调试>附加快照调试器。 选择 Web 应用部署到的 Azure VM 和 Azure 存储帐户,然后选择 “附加”。

    显示选择 Azure 资源的屏幕截图。

    重要

    首次选择 “附加快照调试器”时,IIS 会自动在 VM 上重启。

  3. Visual Studio 现在处于快照调试模式。

    显示快照调试模式的屏幕截图。

    注释

    Application Insights 站点扩展还支持快照调试。 如果收到 站点扩展过期 错误消息,请参阅 站点扩展升级 以了解升级详细信息。

  4. 模块的元数据最初未被激活。 导航到 Web 应用以加载模块。

    模块 窗口显示所有模块加载到 Azure VM 时的状态。 若要打开“ 模块 ”窗口,请选择“ 调试>Windows>模块”。

    显示“模块”窗口的屏幕截图。

    加载所有模块后,可以在 Visual Studio 工具栏中选择 “开始收集 ”按钮。

设置对齐点

  1. 若要设置断点,请在代码编辑器中点击你感兴趣的函数旁边的左侧边栏。 请确保代码能够执行。

    显示在代码编辑器中设置快照点的屏幕截图。

  2. 右键单击快照点空心球形图标,以选择“动作”以显示“快照设置”窗口。

    显示“快照设置”窗口的屏幕截图。

拍摄快照

在工具栏中选择“开始收集”以打开快照点。

显示选择“启动收集”以便打开快照点的屏幕截图。

当您打开快照点时,它会在代码所在的行执行时捕获一个快照。 执行可能需要服务器上的请求。 若要强制命中快照点,请转到网站的浏览器视图并执行任何所需操作。

默认情况下,快照点只捕获一个快照。 快照点捕获快照后,它会关闭。 如果要在快照点捕获另一个快照,可以通过选择 “更新集合”来重新打开快照点。

调试时间旅行记录

  1. 命中快照点时,“ 诊断工具” 窗口中会显示一个快照。 如果未打开此窗口,请选择 “调试>Windows>显示诊断工具”将其打开。

    显示“诊断工具”窗口中的快照的屏幕截图。

  2. 选择 “查看快照 ”以在代码编辑器中打开时间旅行记录。

    • 您可以使用 “继续”“反向继续” 按钮来执行时间旅行调试所记录的每一行代码。

    • 还可以使用“调试”工具栏执行操作,如“显示下一个语句”“单步进入”“单步跳过”“单步退出”“反向进入”“反向跳过”“反向退出”

      显示“调试”工具栏的屏幕截图。

    • 还可以使用 Visual Studio 局部变量监视调用堆栈窗口,并评估表达式。

该网站仍处于实时状态,最终用户不会受到时间旅行调试活动的影响。

有关详细信息和帮助,请参阅 Visual Studio 中快照调试的故障排除和已知问题

设置条件快照点

如果很难在应用程序中重新创建某特定状态,请考虑使用条件快照点。 条件快照点有助于避免收集记录,直到应用进入所需状态,例如当变量具有特定值时。 有关基于表达式、筛选器或命中计数设置条件的详细信息,请参阅 断点条件

本教程介绍了如何使用 Snapshot Debugger 为 Azure VM 收集时间旅行记录。 了解更多关于快照调试的信息: