使用异常帮助程序检查异常

无论技术或专业知识水平如何,处理异常都是一个常见问题。 它可能是一种令人沮丧的体验,找出异常导致代码中的问题的原因。 在 Visual Studio 中调试异常时,我们希望通过为你提供相关的异常信息来减少这种挫折感,以帮助更快地调试问题。

异常帮助程序

出现异常时暂停

当调试器在发生异常时中断,对应的代码行右侧会显示异常错误图标。 非模式异常帮助程序将显示在异常图标附近。

代码行旁的异常辅助工具

检查异常信息

你可以立即在异常帮助程序中读取异常类型和异常消息,以及异常是已引发还是未处理。 可以通过单击 视图详细信息 链接来检查和查看 Exception 对象的属性。

分析空引用

从 Visual Studio 2017 开始,对于 .NET 和 C/C++ 代码,当触发 NullReferenceExceptionAccessViolation时,可以在异常辅助工具中看到“null”分析信息。 分析显示为异常消息下方的文本。 在下图中,信息显示为“s 为空”。

异常帮助程序空分析

说明

托管代码中的空引用分析需要 .NET 版本 4.6.2。 通用 Windows 平台(UWP)和任何其他 .NET Core 应用程序目前不支持 Null 分析。 仅在调试没有任何 Just-In-Time (JIT) 代码优化的代码时可用。

配置异常设置

你可以在异常帮助程序的“异常设置”部分将调试器配置为在引发当前类型的异常时中断。 如果调试器在引发的异常处暂停,则可以使用复选框禁止在将来引发该异常类型时中断。 如果你不想在此特定异常在特定模块中引发时中断,请在“异常设置”窗口中的“例外引发位置:”下方勾选模块名称旁的复选框

检查内部异常

如果异常具有任何内部异常(InnerException,则可以在异常帮助程序中查看它们。 如果存在多个异常,可以使用调用堆栈上方所示的向左箭头和向右箭头在它们之间导航。

异常帮助程序 具有内部异常的异常帮助程序

检查重新引发的异常

在异常 thrown 的情况下,异常帮助程序会显示引发第一次异常的调用堆栈。 如果多次引发异常,则仅显示原始异常中的调用堆栈。

重新引发异常的异常帮助程序 具有重新引发的异常的异常帮助程序

检查异步异常 (.NET)

从 .NET 9 开始,当异步 Task 方法在 .NET Framework 代码中引发异常时,Visual Studio 调试器会自动中断。 这样可以更轻松地调试异步代码,尤其是在 ASP.NET 中,因为异常通常跨异步边界引发。

使用异步方法的异常帮助程序的屏幕截图。

查看调用堆栈

从 Visual Studio 2022 版本 17.3 开始,可以在“调用堆栈”窗口中查看异常堆栈帧。 对于异步异常,这增加了快速加载符号或定位源并直接转到异常站点的功能。 调用堆栈窗口中的异常堆栈帧提供标准调用堆栈功能,例如自动导航、快速切换帧、符号加载和反编译选项,以返回到引发异常的源代码。

使用调用堆栈的异常帮助程序

获取 AI 帮助

如果你有 Copilot,则可以在调试异常时获得 AI 帮助。 只需查找“询问 Copilot”“询问 Copilot”按钮的屏幕截图。按钮。 在这些方案中,Copilot 已经知道你的问题的上下文,因此你无需在聊天中自行提供上下文。 有关详细信息,请参阅使用 Copilot 进行调试

获取存储库上下文的 AI 帮助

使用 Azure DevOps 存储库在 Visual Studio 中工作时,Copilot 的异常分析包含存储库上下文,以便更智能、更快、更精确的异常解析。 Copilot 分析您所打开的存储库,包括过去的 bug、问题、拉取请求和历史修复,以提供与代码库直接相关的可操作的见解。

遇到异常时:

  • Copilot 标识最有可能的根本原因、受影响的组件和潜在修补程序。
  • Copilot 利用存储库知识来突出类似的过去问题和解决方法,帮助你从现有修复中吸取教训。
  • 使用完整上下文分析复杂的异常,将运行时行为连接到历史模式,以便快速了解意外或不正确的值。
  • 通过自动显示相关修复和见解,Copilot 可以节省时间,并减少调试复杂问题时通常所需的试错过程。

使用 Live Share 共享调试会话

在异常帮助程序中,可以使用链接“启动 Live Share 会话...”启动 Live Share 会话。加入 Live Share 会话的任何人均可看到异常帮助程序及任何其他调试信息。