使用 Snapshot Debugger 调试 Azure 虚拟机和 Azure 虚拟机规模集上的实时 ASP.NET 应用

在您关注的代码执行时,Snapshot Debugger 会拍摄生产环境中应用的快照。 若要指示调试器拍摄快照,请在代码中设置快照点和日志点。 调试器使你能够确切地查看出了什么问题,而不会影响生产应用程序的流量。 快照调试器可帮助你大幅减少解决生产环境中出现的问题所需的时间。

快照点和记录点类似于断点,但与断点不同的是,快照点不会在命中时停止应用程序。 通常,在快照点捕获快照需要 10-20 毫秒。

在本教程中,你将:

  • 启动快照调试器
  • 设置快照点并查看快照
  • 设置日志点

先决条件

  • 适用于 Azure 虚拟机(VM)和 Azure 虚拟机规模集的快照调试器仅适用于具有 Azure 开发工作负荷的 Visual Studio 2019 Enterprise 或更高版本。 (在“单个组件”选项卡下,可在“调试和测试>”下找到它快照调试器。)

    如果尚未安装,请安装 Visual Studio 2019 Enterprise

  • 快照集合适用于以下 Azure 虚拟机\虚拟机规模集 Web 应用:

    • ASP.NET .NET Framework 4.6.1 或更高版本上运行的应用程序。
    • ASP.NET 在 Windows 上的 .NET Core 2.0 或更高版本上运行的核心应用程序。

    注释

    在 32 位 Windows 上运行的 Visual Studio Enterprise 将无法查看快照。

打开项目并启动快照调试器

  1. 打开您想要进行快照调试的项目。

    重要

    若要快照调试,需要打开发布到 Azure 虚拟机\虚拟机规模集服务的 相同源代码版本

  2. 选择 “调试 > 附加快照调试器...”。选择 Web 应用部署到的 Azure 虚拟机\虚拟机规模集和 Azure 存储帐户,然后单击“ 附加”。 Snapshot Debugger 还支持 Azure Kubernetes 服务和Azure 应用服务

    从“调试”菜单启动快照调试器

    选择 Azure 资源

    重要

    首次为 VM 选择 “附加快照调试器” 时,会自动重启 IIS。 首次为虚拟机规模集选择 “附加快照调试器” 时,需要手动升级虚拟机规模集的每个实例。

    注释

    (Visual Studio 2019 版本 16.2 及更高版本)Snapshot Debugger 已启用 Azure 云支持。 确保所选的 Azure 资源和 Azure 存储帐户都来自同一个云。 如果对企业的 Azure 符合性 配置有疑问,请联系 Azure 管理员。

    最初,模块 的元数据不会激活,请打开 Web 应用,“开始收集” 按钮将会激活。 Visual Studio 现在处于快照调试模式。

    快照调试模式

    注释

    对于 VMSS,用户首次附加快照调试器后,需要手动升级其虚拟机规模集中的实例。

    模块”窗口将显示所有模块何时为 Azure 虚拟机\虚拟机规模集加载完毕(选择“调试 > Windows > 模块”以打开此窗口)。

    检查“模块”窗口

设置对齐点

  1. 在代码编辑器中,单击感兴趣的代码行旁边的左侧区域以设置一个断点。 请确保您对即将执行的代码有所了解。

    设置捕捉点

  2. 单击“ 开始集合 ”以打开快照点。

    打开捕捉点

    小窍门

    查看快照时无法单步执行,但可以在代码中放置多个快照点,以在不同的代码行执行。 如果代码中有多个快照点,快照调试器可确保相应的快照来自同一个最终用户会话。 即使有许多用户点击你的应用,Snapshot Debugger 也会执行此作。

截取快照

设置快照点后,您可以通过进入网站的浏览器视图并运行标记的代码行来手动生成快照,或者等待用户在网站使用过程中自动生成快照。

检查快照数据

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

    打开捕捉点

  2. 双击快照点以在代码编辑器中打开快照。

    检查快照数据

    在此视图中,可以将鼠标悬停在变量上以查看数据提示、使用 局部变量监视调用堆栈 窗口,以及计算表达式。

    网站本身仍处于实时状态,最终用户不会受到影响。 默认情况下,每个快照点只捕获一个快照:捕获快照后,快照点关闭。 如果要在快照点捕获另一个快照,可以通过单击 “更新集合”来重新打开快照点。

还可以向应用添加更多快照点,并使用 “更新集合 ”按钮打开它们。

需要帮助? 有关快照调试页面,请参阅故障排除和已知问题和常见问题解答。

设置条件快照点

如果很难在应用程序中重新创建某特定状态,请考虑使用条件快照点。 条件快照点可帮助你控制何时拍摄快照,例如变量何时包含要检查的特定值。 可以使用表达式、筛选器或命中计数设置条件。

设置条件断点

  1. 右键单击对齐点图标(空心球体),然后选择 “设置”。

    选择“设置”

  2. 在 snappoint 设置窗口中,键入表达式。

    键入表达式

    在上面的插图中,只有在visitor.FirstName == "Dan"时才对快照点拍摄快照。

设置日志点

除了在命中快照点时拍摄快照之外,还可以配置快照点来记录消息(即创建日志点)。 无需重新部署应用即可设置日志点。 Logpoint 虚拟执行,不会对正在运行的应用程序造成任何影响或副作用。

创建日志点

  1. 右键单击对齐点图标(蓝色六边形),然后选择 “设置”。

  2. 在对齐点设置窗口中,选择 操作

    创建日志点

  3. “消息 ”字段中,可以输入要记录的新日志消息。 还可以通过将变量放在大括号内来评估日志消息中的变量。

    如果选择 “发送到输出”窗口,则当命中日志点时,消息会显示在“诊断工具”窗口中。

    “诊断工具”窗口中的 Logpoint 数据

    如果选择“发送到应用程序日志”,当日志点被命中时,消息会出现在任何可以看到来自System.Diagnostics.Trace(或 .NET Core 中的ILogger)消息的地方,例如App Insights

本教程中,您已学习了如何使用 Snapshot Debugger 调试 Azure 虚拟机和 Azure 虚拟机规模集。 你可能想要阅读有关此功能的更多详细信息。