您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.

.NET 应用中发生异常时的调试快照Debug snapshots on exceptions in .NET apps

本文内容

发生异常时,可自动从实时 Web 应用程序收集调试快照。快照显示发生异常时源代码和变量的状态。Azure 应用程序 Insights中的 Snapshot Debugger 会监视来自你的 web 应用的异常遥测。它可收集常出现的异常的调试快照,为诊断生产中的问题提供所需信息。在应用程序中包括快照收集器 NuGet 包,还可以选择在applicationinsights.config中配置集合参数。快照在 Application Insights 门户中出现异常

可在门户中查看调试快照,查看调用堆栈并检查每个调用堆栈帧中的变量。若要使用源代码获取更强大的调试体验,请使用 Visual Studio 2019 企业版打开快照。在 Visual Studio 中,还可以将快照设置为以交互方式拍摄快照,而无需等待异常。

调试快照存储15天。此保留策略是逐个应用程序进行设置。如果需要,可以在 Azure 门户中打开支持案例,以请求增加此值。

为应用程序启用 Application Insights Snapshot DebuggerEnable Application Insights Snapshot Debugger for your application

快照集合可用于:

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

支持以下环境:

备注

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

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

授予权限Grant permissions

对快照的访问受基于角色的访问控制 (RBAC) 的保护。若要检查快照,必须先由订阅所有者将你添加到必需的角色。

备注

所有者和参与者不会自动具有此角色。如果他们想要查看快照,他们必须将自己添加到此角色。

订阅所有者应将 Application Insights Snapshot Debugger 角色分配给要检查快照的用户。订阅所有者可将该角色分配给目标 Application Insights 资源或其资源组或订阅的各个用户或组。

  • 在 Azure 门户中导航到 Application Insights 资源。
  • 单击“访问控制(IAM)”。
  • 单击“+添加角色分配”按钮。
  • 从“角色”下拉列表中,选择“Application Insights 快照调试程序”。
  • 搜索并输入要添加的用户的名称。
  • 单击“保存”按钮将用户添加到角色。

重要

快照的变量和参数值中可能包含个人信息和其他敏感信息。

在门户中查看快照View Snapshots in the Portal

在应用程序中发生异常并且已创建快照后,你应该具有要查看的快照。可能需要5到10分钟的时间,因为快照已准备就绪,可以从门户查看。若要查看快照,请在查看 "**操作" 选项卡时选择 "操作" 按钮,或在查看 "异常" 选项卡时选择 "例外**" 按钮:

故障页

在右窗格中选择 "操作" 或 "例外",打开 "端到端事务详细信息" 窗格,然后选择 "异常" 事件。如果某个快照适用于给定的异常,则会在右侧窗格中显示 "打开调试快照" 按钮,其中包含异常的详细信息。

异常区域中的“打开调试快照”按钮

在“调试快照”视图中,可以看到调用堆栈和变量窗格。当在调用堆栈窗格中选择调用堆栈帧时,可在变量窗格中查看该函数调用的局部变量和参数。

在门户中查看调试快照

快照可能包含敏感信息,默认情况下不可查看。要查看快照,必须获取 Application Insights Snapshot Debugger 角色。

在 Visual Studio 2017 Enterprise 或更高版本中查看快照View Snapshots in Visual Studio 2017 Enterprise or above

  • 单击 "下载快照" 按钮,下载可由 Visual Studio Enterprise 打开的 .diagsession 文件。

  • 若要打开 .diagsession 文件,需要安装 Snapshot Debugger Visual Studio 组件。Snapshot Debugger 组件是 Visual Studio 中 ASP.net 工作负荷的必需组件,可从 Visual Studio 安装程序的单个组件列表中进行选择。如果使用 Visual studio 2017 版本15.5 之前的 Visual Studio 版本,则需要从Visual Studio Marketplace安装该扩展。

  • 打开快照文件后,将出现 Visual Studio 中的“小型转储调试”页面。单击“调试托管代码”开始调试快照。快照将打开到引发异常的代码行,以便可以调试进程的当前状态。

在 Visual Studio 中查看调试快照

下载的快照中包含在 Web 应用程序服务器上找到的所有符号文件。需要使用这些符号文件将快照数据与源代码相关联。对于应用服务应用,请确保在发布 Web 应用时启用符号部署。

快照的工作原理How snapshots work

快照收集器以 Application Insights 遥测处理器的形式实现。应用程序运行时,会将快照收集器遥测处理器添加到应用程序的遥测管道中。每次应用程序调用 TrackException 时,快照收集器都会根据引发的异常类型和引发方法计算问题 ID。每次应用程序调用 TrackException 时,计数器都会递增以获得相应的问题 ID。当计数器达到 ThresholdForSnapshotting 值时,问题 ID 将添加到收集计划。

快照收集器还通过订阅 AppDomain.CurrentDomain.FirstChanceException 事件来监视引发的异常。当该事件触发时,将计算异常的问题 ID 并将其与收集计划中的问题 ID 进行比较。如果匹配,则将创建正在运行的进程的快照。将为快照分配一个唯一标识符,并使用该标识符标记异常。FirstChanceException 处理程序返回后,将按正常方式处理引发的异常。最终,异常会再次到达 TrackException 方法,该方法将异常与快照标识符一起报告给 Application Insights。

主进程会继续运行并向用户提供流量,几乎没有中断。同时,快照将传递给快照上传程序进程。快照上传程序会创建一个小型转储并将其连同任何相关的符号 (.pdb) 文件一起上传到 Application Insights。

提示

  • 进程快照是正在运行的进程的暂停克隆。
  • 创建快照大约需要 10 到 20 毫秒。
  • ThresholdForSnapshotting 的默认值为 1。这也是最小值。因此,在创建快照之前,应用程序必须触发相同的异常两次
  • 如果想要在 Visual Studio 中调试时生成快照,请将 IsEnabledInDeveloperMode 设置为 true。
  • 快照创建速率受 SnapshotsPerTenMinutesLimit 设置的限制。默认情况下,限制为每十分钟一个快照。
  • 每天不超过 50 张的快照可以上传。

限制Limitations

默认数据保留期为15天。对于每个 Application Insights 实例,每天允许的最大快照数为50。

发布符号Publish symbols

快照调试程序要求符号文件位于生产服务器上,这样它才能在 Visual Studio 中解码变量并提供调试体验。默认情况下,在发布到应用服务时,Visual Studio 2017 版本 15.2(或更高版本)会发布适用于发行版本的符号。在以前的版本中,需要将以下代码行添加到发布配置文件 .pubxml,以便在发布模式下发布符号:

  1. <ExcludeGeneratedDebugSymbol>False</ExcludeGeneratedDebugSymbol>

对于 Azure 计算和其他类型,请确保符号文件位于主应用程序 .dll 所在的同一文件夹(通常为 wwwroot/bin)中,或者可通过当前路径访问。

备注

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

优化的内部版本Optimized builds

在某些情况下,由于 JIT 编译器应用了优化,无法在发布版本中查看局部变量。但是,在 Azure 应用服务中,快照收集器可以对属于其收集计划的引发方法取消优化。

提示

在应用服务中安装 Application Insights 站点扩展可获得取消优化支持。

后续步骤Next steps

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

除了 Application Insights Snapshot Debugger: