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

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

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

支持的应用程序和环境

应用程序

快照集合可用于:

环境

Snapshot Debugger 支持以下环境:

注意

不支持客户端应用程序,例如 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 该值时,Snapshot Debugger 会将问题 ID 添加到收集计划。

    注意

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

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

  5. 如果问题 ID 之间存在匹配项,快照调试器会创建正在运行的进程 快照

    快照调试器为该快照分配一个唯一标识符,并给异常附上该标识符。

    注意

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

  6. FirstChanceException 处理程序返回后,应用程序会照常处理抛出的异常。

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

注意

true 设置为 IsEnabledInDeveloperMode,以便在 Visual Studio 中调试时生成快照。

Snapshot Uploader 进程

虽然 Snapshot Debugger 进程会继续运行,并在几乎不中断的情况下为用户提供服务,但它会将快照移交给 Snapshot Uploader 进程。 在典型情况下,快照上传器:

  1. 创建小型转储。

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

注意

快照上传程序每天最多可以上传 50 个快照。

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

升级快照调试器

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

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

快照调试器开销

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

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

  • 应用程序引发异常时
  • 如果异常处理程序决定创建快照
  • 调用 TrackException

存储 Snapshot Debugger 捕获的数据无需额外费用

请参阅可能会遇到 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: