JetBrains Rider 2025.2 Help

调试 .NET 异常

异常是运行时发生的错误,通常会中断程序的正常执行流程。 未处理的异常会终止发生异常的线程。 在单线程应用程序中,这通常会结束整个进程。 在多线程应用程序中,如果其他线程仍在运行,进程可能会继续。

为了帮助调试,JetBrains Rider 允许您显式配置调试器,在抛出任何异常或特定类型的异常时暂停程序的执行。 这种暂停发生在异常发生之后、任何异常处理执行之前,使您能够检查程序的 堆栈帧及其周围的上下文。

异常断点

要调试代码中或外部代码中的异常(无论是已处理还是未处理的),您需要创建一个特殊的 异常断点。 与 行断点不同,异常断点不是分配给某一行代码,而是分配给某种异常类型(例如,在 .NET 中,可以是从 异常 类型继承的任何类型)或任何 CLR 异常。

添加异常断点

  1. 请执行以下操作之一:

    • 在主菜单中选择 运行 | 在异常时停止

    • 断点对话框Ctrl+Shift+F8运行 | 调试器操作 | 查看断点... )中,单击 并选择 CLR 异常断点

  2. 在打开的对话框中,指定所需的异常类型名称,然后单击 确定。 断点将被添加到 CLR 异常断点 下的断点列表中,位于 断点对话框中。

    JetBrains Rider:新建异常断点
  3. 指定 断点属性并单击 完成

忽略特定异常

CLR 异常断点 类别在 断点对话框中包含 任何异常 断点。 启用时,其 属性将用于匹配程序抛出的所有 .NET CLR 异常。

当您 为特定异常类型添加断点到此类别时,它将覆盖 任何异常 的属性。

因此,您可以启用 任何异常 断点,为您想要跳过的异常类型添加断点,并清除其属性中的 挂起执行 复选框。 通过此配置,调试器将停止在任何异常上,排除被忽略类型的异常。

您可以进一步微调此行为,例如,您可以选择 如果满足条件则暂停 组中 任何异常 断点的所有复选框,并清除特定异常类型的 外部代码 复选框。 这样,您将仅忽略在库代码中抛出的特定类型的异常,并在所有其他异常(如果有)上中断。

异常断点属性

条目

描述

已启用

选中此复选框以启用所选断点。 如果断点被禁用,则在调试期间不会被触发。

您还可以使用左侧视图中的复选框启用/禁用断点。

挂起执行

如果您希望调试器在断点被触发时暂停程序,请选中此复选框。 如果您希望断点仅 记录一些数据计算一个表达式而不暂停程序,可以禁用此选项。

日志

如果您希望在调试器输出中 记录断点命中 ,请选中这些复选框。 您可以选择记录断点被触发的事实,或记录断点被触发时程序的完整堆栈跟踪,或两者都记录。

当您将断点用于日志记录时,通常需要清除 挂起 复选框。

在断点命中之前禁用

从列表中选择您希望当前断点 依赖的断点

此外,您还可以选择在当前断点启用并命中后再次禁用它,或者保持启用状态。

如果满足条件则暂停

这一组复选框可让您配置是否根据异常抛出的位置(用户代码外部代码 )以及处理方式停下来。

例如,您可能希望仅在外部代码中抛出并在用户代码中处理的异常上暂停调试器。

调试工作流程

当添加异常断点时,JetBrains Rider 将在抛出匹配的异常时中断程序执行,并显示异常弹出窗口,其中包含异常类型、其调用堆栈以及指向相应调用的可点击链接:

JetBrains Rider:从异常打开堆栈跟踪

使用此弹出窗口调查异常及其周围的上下文:

  • 停止 :停止调试会话。 如果您在处理的异常上中断,并且不想转到 捕捉 子句,这可能会有所帮助。

  • 静默和还原 :恢复程序执行,并添加一个新的异常断点,该断点将作为忽略类似断点的一种方式。 例如,如果您在未处理的 NotImplementedException 上中断,将为 NotImplementedException 创建一个新的异常断点,并取消选中 未处理 复选框。

  • 恢复恢复 :如果异常已处理,或者您正在调试多线程进程,恢复程序是有意义的。

  • 堆栈跟踪资源管理器 :在 堆栈跟踪窗口中打开异常详细信息,您可以立即或稍后探索堆栈跟踪。

  • 设置/首选项查看断点 :打开由此异常触发的异常断点的属性。

  • 创建断点 :创建一个新的异常断点,以匹配异常类型和上下文。 例如,如果 任何异常 断点是由未处理的 NotImplementedException 触发的,将为未处理的 NotImplementedException 创建一个新的断点。

最后修改日期: 2025年 9月 26日