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

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

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

详细了解 Snapshot Debugger 和 Snapshot Uploader 进程。

支持的应用程序和环境

本部分列出了受支持的应用程序和环境。

应用程序

快照集合可用于:

环境

支持以下环境:

注意

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

使用 Snapshot Debugger 的先决条件

包和配置

权限

Snapshot Debugger 的工作原理

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

重要

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

Snapshot Debugger 进程

Snapshot Debugger 进程以 TrackException 方法开始和结束。 进程快照是正在运行的进程的挂起克隆,因此用户几乎不会遇到任何中断。 在典型方案中:

  1. 应用程序引发 TrackException

  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 进程。 在典型方案中,Snapshot Uploader:

  1. 创建小型转储。

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

注意

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

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

正在升级 Snapshot Debugger

Snapshot Debugger 通过预安装的内置 Application Insights 站点扩展自动升级。

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

开销

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: