.NET 应用中发生异常时的调试快照Debug snapshots on exceptions in .NET apps
发生异常时,可自动从实时 Web 应用程序收集调试快照。快照显示发生异常时源代码和变量的状态。中的 Snapshot Debugger 会监视来自你的 web 应用的异常遥测。它可收集常出现的异常的调试快照,为诊断生产中的问题提供所需信息。在应用程序中包括快照收集器 NuGet 包,还可以选择在中配置集合参数。快照在 Application Insights 门户中出现异常。
可在门户中查看调试快照,查看调用堆栈并检查每个调用堆栈帧中的变量。若要使用源代码获取更强大的调试体验,请使用 Visual Studio 2019 企业版打开快照。在 Visual Studio 中,还可以,而无需等待异常。
调试快照存储15天。此保留策略是逐个应用程序进行设置。如果需要,可以在 Azure 门户中打开支持案例,以请求增加此值。
快照集合可用于:
- 运行 .NET Framework 4.5 或更高版本的 .NET Framework 和 ASP.NET 应用程序。
- 在 Windows 上运行的 .NET Core 2.0 和 ASP.NET Core 2.0 应用程序。
支持以下环境:
- 运行 OS 系列4或更高版本的Azure 云服务
- 在 Windows Server 2012 R2 或更高版本上运行的
- 运行 Windows Server 2012 R2 或更高版本的Azure 虚拟机和虚拟机规模集
- 运行 Windows Server 2012 R2 或更高版本或更高版本 Windows 8.1 或更高版本的物理计算机
备注
不支持客户端应用程序(例如,WPF、Windows 窗体或 UWP)。
如果已启用 Snapshot Debugger 但未查看快照,请查看故障排除指南。
授予权限Grant permissions
对快照的访问受基于角色的访问控制 (RBAC) 的保护。若要检查快照,必须先由订阅所有者将你添加到必需的角色。
备注
所有者和参与者不会自动具有此角色。如果他们想要查看快照,他们必须将自己添加到此角色。
订阅所有者应将 角色分配给要检查快照的用户。订阅所有者可将该角色分配给目标 Application Insights 资源或其资源组或订阅的各个用户或组。
- 在 Azure 门户中导航到 Application Insights 资源。
- 单击“访问控制(IAM)”。
- 单击“+添加角色分配”按钮。
- 从“角色”下拉列表中,选择“Application Insights 快照调试程序”。
- 搜索并输入要添加的用户的名称。
- 单击“保存”按钮将用户添加到角色。
快照的变量和参数值中可能包含个人信息和其他敏感信息。
在应用程序中发生异常并且已创建快照后,你应该具有要查看的快照。可能需要5到10分钟的时间,因为快照已准备就绪,可以从门户查看。若要查看快照,请在查看 "**操作" 选项卡时选择 "操作" 按钮,或在查看 "异常" 选项卡时选择 "例外**" 按钮:
在右窗格中选择 "操作" 或 "例外",打开 "端到端事务详细信息" 窗格,然后选择 "异常" 事件。如果某个快照适用于给定的异常,则会在右侧窗格中显示 "打开调试快照" 按钮,其中包含异常的详细信息。
在“调试快照”视图中,可以看到调用堆栈和变量窗格。当在调用堆栈窗格中选择调用堆栈帧时,可在变量窗格中查看该函数调用的局部变量和参数。
快照可能包含敏感信息,默认情况下不可查看。要查看快照,必须获取 Application Insights Snapshot Debugger
角色。
在 Visual Studio 2017 Enterprise 或更高版本中查看快照View Snapshots in Visual Studio 2017 Enterprise or above
单击 "下载快照" 按钮,下载可由 Visual Studio Enterprise 打开的
.diagsession
文件。若要打开 文件,需要安装 Snapshot Debugger Visual Studio 组件。Snapshot Debugger 组件是 Visual Studio 中 ASP.net 工作负荷的必需组件,可从 Visual Studio 安装程序的单个组件列表中进行选择。如果使用 Visual studio 2017 版本15.5 之前的 Visual Studio 版本,则需要从Visual Studio Marketplace安装该扩展。
快照收集器以 的形式实现。应用程序运行时,会将快照收集器遥测处理器添加到应用程序的遥测管道中。每次应用程序调用 TrackException 时,快照收集器都会根据引发的异常类型和引发方法计算问题 ID。每次应用程序调用 TrackException 时,计数器都会递增以获得相应的问题 ID。当计数器达到 ThresholdForSnapshotting
值时,问题 ID 将添加到收集计划。
快照收集器还通过订阅 事件来监视引发的异常。当该事件触发时,将计算异常的问题 ID 并将其与收集计划中的问题 ID 进行比较。如果匹配,则将创建正在运行的进程的快照。将为快照分配一个唯一标识符,并使用该标识符标记异常。FirstChanceException 处理程序返回后,将按正常方式处理引发的异常。最终,异常会再次到达 TrackException 方法,该方法将异常与快照标识符一起报告给 Application Insights。
主进程会继续运行并向用户提供流量,几乎没有中断。同时,快照将传递给快照上传程序进程。快照上传程序会创建一个小型转储并将其连同任何相关的符号 (.pdb) 文件一起上传到 Application Insights。
提示
- 进程快照是正在运行的进程的暂停克隆。
- 创建快照大约需要 10 到 20 毫秒。
ThresholdForSnapshotting
的默认值为 1。这也是最小值。因此,在创建快照之前,应用程序必须触发相同的异常两次。- 如果想要在 Visual Studio 中调试时生成快照,请将 设置为 true。
- 快照创建速率受
SnapshotsPerTenMinutesLimit
设置的限制。默认情况下,限制为每十分钟一个快照。 - 每天不超过 50 张的快照可以上传。
限制Limitations
默认数据保留期为15天。对于每个 Application Insights 实例,每天允许的最大快照数为50。
快照调试程序要求符号文件位于生产服务器上,这样它才能在 Visual Studio 中解码变量并提供调试体验。默认情况下,在发布到应用服务时,Visual Studio 2017 版本 15.2(或更高版本)会发布适用于发行版本的符号。在以前的版本中,需要将以下代码行添加到发布配置文件 .pubxml
,以便在发布模式下发布符号:
对于 Azure 计算和其他类型,请确保符号文件位于主应用程序 .dll 所在的同一文件夹(通常为 )中,或者可通过当前路径访问。
备注
有关可用的不同符号选项的详细信息,请参阅。为了获得最佳结果,建议使用 "完整"、"可移植" 或 "嵌入"。
在某些情况下,由于 JIT 编译器应用了优化,无法在发布版本中查看局部变量。但是,在 Azure 应用服务中,快照收集器可以对属于其收集计划的引发方法取消优化。
提示
在应用服务中安装 Application Insights 站点扩展可获得取消优化支持。
除了 Application Insights Snapshot Debugger:
- ,无需等待出现异常即可获取快照。
- 智能检测可自动发现性能异常。