次の方法で共有

使用 Snapshot Debugger 调试 .NET 应用程序中的异常

启用后,Snapshot Debugger 会在实时 .NET 应用程序中发生异常时自动收集源代码和变量的调试快照。 Application Insights 中的 Snapshot Debugger:

  • 监视 Web 应用中系统生成的日志。
  • 收集最常发生异常的快照。
  • 提供诊断生产问题所需的信息。

支持的应用程序和环境

应用程序

快照集合可用于:

环境

支持以下环境:

注意

不支持客户端应用程序,例如 WPF、Windows 窗体或 UWP。

使用 Snapshot Debugger 的先决条件

软件包和配置

权限

Snapshot Debugger 的工作原理

Snapshot Debugger 将以 Application Insights 遥测处理器的形式实现。 在应用程序运行时,会将 Snapshot Debugger 遥测处理器添加到应用程序的系统生成的日志管道中。

重要

快照可能在变量和参数值中包含个人数据或其他敏感信息。 快照数据与 Application Insights 资源存储在同一区域中。

Snapshot Debugger 进程

Snapshot Debugger 进程以 TrackException 方法开始和结束。 进程快照是正在运行的进程挂起的克隆。 你的用户体验几乎没有中断。 在典型方案中:

  1. 在应用程序中引发异常,并通过调用 TrackException 该方法向 Application Insights 报告异常。

  2. Snapshot Debugger 通过订阅 AppDomain.CurrentDomain.FirstChanceException 事件来监视引发的异常。

  3. 针对问题 ID 递增计数器。

    当计数器达到 ThresholdForSnapshotting 值时,问题 ID 将添加到收集计划。

    注意

    ThresholdForSnapshotting 默认最小值为 1。 使用此值,在创建快照之前,应用必须触发相同的异常两次

  4. 将计算异常事件的问题 ID,并将其与收集计划中的问题 ID 进行比较。

  5. 如果问题 ID 匹配,则将创建正在运行的进程的快照

    将为快照分配一个唯一标识符,并使用该标识符标记异常。

    注意

    快照创建速率受 SnapshotsPerTenMinutesLimit 设置的限制。 默认情况下,限制为 10 分钟一个快照。

  6. FirstChanceException 处理程序返回后,将按正常方式处理引发的异常。

  7. 异常会再次到达 TrackException 方法,该方法会将异常与快照标识符一起报告给 Application Insights。

注意

如果想要在 Visual Studio 中进行调试时生成快照,请将 IsEnabledInDeveloperMode 设置为 true

Snapshot Uploader 进程

当 Snapshot Debugger 进程继续运行并在几乎没有中断的情况下为用户提供流量时,快照将移交给 Snapshot Uploader 进程。 在典型情况下,快照上传器:

  1. 创建小型转储。

  2. 上传小型转储文件及任何相关的符号 (.pdb) 文件到 Application Insights。

注意

每天可以上传不超过 50 个快照。

如果已启用 Snapshot Debugger 但未看到快照,请参阅故障排除指南

正在升级 Snapshot Debugger

快照调试器通过内置且预安装的 Application Insights 站点扩展进行自动升级。

通过手动添加 Application Insights 站点扩展来使 Snapshot Debugger 保持最新状态已弃用。

开销

Snapshot Debugger 设计用于生产环境。 默认设置包括速率限制,以最大限度地减少对应用程序的影响。

但是,您可能会遇到与快照调试器相关的小量 CPU、内存和 I/O 开销,例如:

  • 在应用程序中抛出异常时
  • 如果异常处理程序决定创建快照
  • 调用 TrackException

存储快照调试器捕获的数据 无需额外付费

请参阅可能会遇到 Snapshot Debugger 开销的示例方案。

限制

本部分将讨论适用于 Snapshot Debugger 的限制。

  • 数据保留

    调试快照将存储 15 天。 默认数据保留策略基于每个应用程序进行设置。 如果需要,可以在 Azure 门户中打开支持案例,以请求增加此值。 对于每个 Application Insights 实例,每天允许的最大快照数为 50。

  • 发布符号

    Snapshot Debugger 需要生产服务器上的符号文件,以便于:

    • 解码变量
    • 在 Visual Studio 中提供调试体验

    默认情况下,Visual Studio 2017 版本 15.2 或更高版本在发布到应用服务时发布发布版本的符号。

    在以前的版本中,您必须将以下行添加到发布配置文件 .pubxml 中,以便在发布模式下发布符号:

        <ExcludeGeneratedDebugSymbol>False</ExcludeGeneratedDebugSymbol>
    

    Azure Compute 和其他类型,请确保符号文件符合以下条件之一:

    • 位于主应用程序 .dll 所在的同一文件夹中(通常为 wwwroot/bin),或
    • 在当前路径上可用。

    有关可用的不同符号选项的详细信息,请参阅 Visual Studio 文档。 为了获得最佳结果,建议使用“完整”、“可移植”或“嵌入式”。

  • 优化的内部版本

    在某些情况下,由于 JIT 编译器应用的优化,无法在发布版本中查看局部变量。

    但是,在应用服务中,Snapshot Debugger 可以取消对其收集计划中抛出方法的优化。

    提示

    在应用服务实例中安装 Application Insights 站点扩展,以获取关于取消优化的支持。

为你的应用程序启用 Application Insights Snapshot Debugger: