通过


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

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

异常帮助程序

出现异常时暂停

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

代码行旁的异常辅助工具

检查异常信息

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

分析空引用

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

异常帮助程序空分析

注意

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

配置异常设置

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

检查内部异常

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

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

检查重新引发的异常

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

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

检查异步异常(.NET)

从 .NET 9 开始,当异步 Task 方法在 .NET 框架代码中引发异常时,Visual Studio调试器会自动中断。 这使得异步代码的调试更简单,特别是在 ASP.NET 中,因为异常通常会跨越异步边界被抛出。

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

查看调用堆栈

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

调用堆栈的异常帮助程序

获取 AI 帮助

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

如果Copilot希望访问“输出”窗口上下文以帮助分析问题,它将提示你在“聊天”窗口中提供此权限。 如果授予权限,则允许Copilot根据运行时详细信息对异常执行其他分析。 异常帮助程序、变量分析、代码检查和其他调试方案可以访问当前调试会话的此上下文。

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

当您在Visual Studio中使用Azure DevOps存储库工作时,Copilot通过结合存储库上下文,实现更智能、更快速和更精确的异常分析和解决。 Copilot 会交叉引用你打开的存储库,包括过去的 bug、问题、拉取请求和历史修复,从而提供与你的代码库直接相关的可操作见解。

遇到异常时:

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

对于需要端到端诊断(超出单个异常)的复杂 bug,可以使用调试器代理。 调试器代理提供了一个代理工作流,该工作流使用实时运行时数据重现、检测和验证修复。 有关详细信息,请参阅使用调试程序智能体以智能体方式解决 bug

使用 Live Share 共享调试会话

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