启用后,Snapshot Debugger 会在实时 .NET 应用程序中发生异常时自动收集源代码和变量的调试快照。 Application Insights 中的 Snapshot Debugger:
- 监视 Web 应用中系统生成的日志。
- 收集最常发生异常的快照。
- 提供诊断生产问题所需的信息。
支持的应用程序和环境
应用程序
快照集合可用于:
- .NET Framework 4.6.2 及更高版本。
- Windows 上的 .NET 6.0 或更高版本。
环境
Snapshot Debugger 支持以下环境:
- Azure 应用服务
- Azure Functions
- 运行 OS 系列 4 或更高版本的 Azure 云服务
- Windows Server 2012 R2 或更高版本上运行的 Azure Service Fabric
- 运行 Windows Server 2012 R2 或更高版本的 Azure 虚拟机和 Azure 虚拟机规模集
- 运行 Windows Server 2012 R2(或更高版本)或 Windows 8.1(或更高版本)的本地虚拟机或物理计算机
注意
不支持客户端应用程序,例如 WPF、Windows 窗体或 UWP。
Snapshot Debugger 的先决条件
软件包和配置
- 在应用程序中包括 Snapshot Collector NuGet 包。
- 在
ApplicationInsights.config中配置数据收集参数。
权限
- 确认您具有目标 Application Insights 快照 的 Application Insights 快照调试器 角色。
Snapshot Debugger 的工作原理
Snapshot Debugger 充当 Application Insights 遥测处理器。 应用程序运行时,Snapshot Debugger 遥测处理器会联接应用程序的系统生成的日志管道。
重要
快照可能在变量和参数值中包含个人数据或其他敏感信息。 Application Insights 将快照数据存储在资源所在的同一区域中。
Snapshot Debugger 进程
Snapshot Debugger 进程以 TrackException 方法开始和结束。 进程快照是正在运行的进程挂起的克隆。 你的用户体验几乎没有中断。 在典型方案中:
应用程序会引发异常,并通过调用
TrackException该方法将其报告给 Application Insights。Snapshot Debugger 通过订阅
AppDomain.CurrentDomain.FirstChanceException事件来监视引发的异常。快照调试器为问题 ID 递增计数器。
当计数器达到
ThresholdForSnapshotting该值时,Snapshot Debugger 会将问题 ID 添加到收集计划。注意
ThresholdForSnapshotting默认最小值为 1。 使用此值,应用在快照调试器创建快照之前必须触发同一异常 两次 。Snapshot Debugger 计算异常事件的问题 ID,并将其与收集计划中的问题 ID 进行比较。
如果问题 ID 之间存在匹配项,快照调试器会创建正在运行的进程 快照 。
快照调试器为该快照分配一个唯一标识符,并给异常附上该标识符。
注意
此设置
SnapshotsPerTenMinutesLimit会限制快照创建速率。 默认情况下,限制为 10 分钟一个快照。在
FirstChanceException处理程序返回后,应用程序会照常处理抛出的异常。异常再次传到
TrackException方法,该方法会将其连同快照标识符一起报告给 Application Insights。
注意
将 true 设置为 IsEnabledInDeveloperMode,以便在 Visual Studio 中调试时生成快照。
Snapshot Uploader 进程
虽然 Snapshot Debugger 进程会继续运行,并在几乎不中断的情况下为用户提供服务,但它会将快照移交给 Snapshot Uploader 进程。 在典型情况下,快照上传器:
创建小型转储。
上传小型转储文件及任何相关的符号 (.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: