无论技术或专业知识水平如何,处理异常都是一个常见问题。 它可能是一种令人沮丧的体验,找出异常导致代码中的问题的原因。 在 Visual Studio 中调试异常时,我们希望通过为你提供相关的异常信息来减少这种挫折感,以帮助更快地调试问题。
出现异常时暂停
当调试器在发生异常时中断,对应的代码行右侧会显示异常错误图标。 非模式异常帮助程序将显示在异常图标附近。
检查异常信息
你可以立即在异常帮助程序中读取异常类型和异常消息,以及异常是已引发还是未处理。 可以通过单击 视图详细信息 链接来检查和查看 Exception 对象的属性。
分析空引用
从 Visual Studio 2017 开始,对于 .NET 和 C/C++ 代码,当触发 NullReferenceException
或 AccessViolation
时,可以在异常辅助工具中看到“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 进行调试。
使用 Live Share 共享调试会话
在异常帮助程序中,可以使用链接“启动 Live Share 会话...”启动 Live Share 会话。加入 Live Share 会话的任何人均可看到异常帮助程序及任何其他调试信息。