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

无论你的技术或专业水平如何,处理异常都是常见问题。 弄清楚为什么异常会导致代码中的问题可能是让人沮丧的经历。 当你在 Visual Studio 中调试异常时,我们希望通过为你提供相关的异常信息来帮助你更快地调试问题,从而减轻这种挫败感。

异常帮助程序

出现异常时暂停

当调试器因异常而中断时,该代码行的右侧会出现一个异常错误图标。 非模式异常帮助程序将在异常图标附近显示。

代码行旁边的异常帮助程序

检查异常信息

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

分析空引用

从 Visual Studio 2017 开始,对于 .NET 和 C/C++ 代码,当你命中 NullReferenceExceptionAccessViolation 时,你将在异常帮助程序中看到空分析信息。 分析显示为异常消息下方的文本。 在下图中,信息显示为“s 为空”。

异常帮助程序空分析

注意

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

配置异常设置

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

检查内部异常

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

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

检查重新引发的异常

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

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

检查异步异常 (.NET)

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

带有 async 方法的异常帮助程序的屏幕截图。

查看调用堆栈

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

调用堆栈的异常帮助程序

获取 AI 帮助

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

与 Live Share 共享调试会话

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