# 断点

> For the complete documentation index, see [llms.txt](https://www.jetbrains.com.cn/help/idea/llms.txt).

> **TL;DR**
> 切换行断点： `Ctrl+F8` (Windows), `⌘ F8` (macOS), `⌘ F8` (IntelliJ IDEA Classic (macOS)), `⌃ Quote` (macOS System Shortcuts), `Ctrl+F8` (XWin), `Ctrl+F8` (GNOME), `Ctrl+8` (KDE), `Ctrl+F8` (Emacs), `Ctrl+F8` (Sublime Text), `⌘ F8` (Sublime Text (macOS)), `F9` (Visual Studio), `F9` (Visual Studio (macOS)), `Ctrl+F8` (NetBeans), `Ctrl+Shift+B` (Eclipse), `⌘ ⇧ B` (Eclipse (macOS))
>
>
>
> 编辑断点属性： `Ctrl+Shift+F8` (Windows), `⌘ ⇧ F8` (macOS), `⌘ ⇧ F8` (IntelliJ IDEA Classic (macOS)), `⌘ ⇧ F8` (macOS System Shortcuts), `Ctrl+Shift+F8` (XWin), `Ctrl+Shift+F8` (GNOME), `Ctrl+Shift+F8` (KDE), `Ctrl+Shift+F8` (Emacs), `Ctrl+Shift+F8` (Sublime Text), `⌘ ⇧ F8` (Sublime Text (macOS)), `Alt+F9` (Visual Studio), `⌥ F9` (Visual Studio (macOS)), `Ctrl+Shift+F8` (NetBeans), `Ctrl+Shift+F8` (Eclipse), `⌘ ⇧ F8` (Eclipse (macOS))

断点是能够使程序在特定点暂停执行的特殊标记。 这样可以 [检查程序状态](examining-suspended-program.html)和 [逐步执行程序](stepping-through-the-program.html)。 断点可以很简单，例如在到达某行代码时暂停程序，或者涉及更复杂的逻辑，比如检查 [附加条件](#breakpoint_condition)、 [写入日志](#log)等)。

设置后，除 [临时断点](#remove_once_hit) 外，断点会保留在项目中，直到您显式移除。

> **Note:**
> 如果带有断点的文件被外部修改，例如通过 VCS 更新或在外部编辑器中更改，并且行号发生了变化，断点将相应移动。 请注意，进行此类更改时，IntelliJ IDEA 必须在运行，否则将不会被注意到。

## 断点类型

在 IntelliJ IDEA 中有以下类型的断点：

* 行断点 ：在到达设置断点的代码行时暂停程序。 这种类型的断点可以设置在任何可执行的代码行上。

* Method breakpoints ：程序在进入或退出指定方法或其实现之一时暂停，使您可以检查方法的进入/退出条件。

* 字段监视点 ：当指定字段被读取或写入时暂停程序。 这允许您对特定实例变量的交互做出反应。 例如，如果在一个复杂的过程中，您的某个字段的值明显错误，设置字段观察点可能有助于确定故障的起因。 > **Note:** > 字段监视点不适用于通过反射进行的字段修改。

* 异常断点 ：当抛出 `Throwable` 或其子类时暂停程序。 它们在任何情况下都适用，不需要特定的源代码引用。 与堆栈跟踪不同，在异常时暂停应用程序可让您检查周围的上下文或数据，同时这些数据仍然可用。

## 设置断点。设置断点？ no period? Title: 设置断点l?

Procedure: 设置行断点

* 点击可执行代码行的装订区域，设置断点。 或者，将文本光标置于该行并按 `Ctrl+F8` (Windows), `⌘ F8` (macOS), `⌘ F8` (IntelliJ IDEA Classic (macOS)), `⌃ Quote` (macOS System Shortcuts), `Ctrl+F8` (XWin), `Ctrl+F8` (GNOME), `Ctrl+8` (KDE), `Ctrl+F8` (Emacs), `Ctrl+F8` (Sublime Text), `⌘ F8` (Sublime Text (macOS)), `F9` (Visual Studio), `F9` (Visual Studio (macOS)), `Ctrl+F8` (NetBeans), `Ctrl+Shift+B` (Eclipse), `⌘ ⇧ B` (Eclipse (macOS))。

![指示行断点的红色圆圈](https://resources.jetbrains.com.cn/help/img/idea/2026.3/debug_line_breakpoint.png)

* 要定位某行内特定的 lambda 或 if-return 语句，请使用出现在这些语句附近的断点图标。

![行内的圆圈让您可以在 lambda 和 if 返回语句上设置断点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/lambda-breakpoint-in-java.png)

在 lambda 是该行中唯一具有调试意义的代码的场景中，例如 Java Stream 操作，IntelliJ IDEA 会自动为此 lambda 设置断点，而不是为整行设置断点。

* 要设置临时行断点，请按 `Ctrl+Alt+Shift+F8` (Windows), `⌘ ⌥ ⇧ F8` (macOS), `⌘ ⌥ ⇧ F8` (IntelliJ IDEA Classic (macOS)), `⌘ ⌥ ⇧ \` (macOS System Shortcuts), `Ctrl+Alt+Shift+F8` (XWin), `Ctrl+Alt+Shift+F8` (GNOME), `Ctrl+Alt+Shift+F8` (KDE), `Ctrl+Alt+Shift+F8` (Emacs), `Ctrl+Alt+Shift+F8` (Sublime Text), `⌘ ⌥ ⇧ F8` (Sublime Text (macOS)), `Ctrl+Alt+Shift+F8` (Visual Studio), `⌘ ⌥ ⇧ F8` (Visual Studio (macOS)), `Ctrl+Alt+Shift+F8` (NetBeans), `Ctrl+Alt+Shift+F8` (Eclipse), `⌘ ⌥ ⇧ F8` (Eclipse (macOS))。 或者按住 `Alt` (Windows), `Alt` (macOS), `Alt` (IntelliJ IDEA Classic (macOS)), `Alt` (macOS System Shortcuts), `Alt` (XWin), `Alt` (GNOME), `Alt` (KDE), `Alt` (Emacs), `Alt` (Sublime Text), `Alt` (Sublime Text (macOS)), `Alt` (Visual Studio), `Alt` (Visual Studio (macOS)), `Alt` (NetBeans), `Alt` (Eclipse), `Alt` (Eclipse (macOS)) 并点击栏边。 此断点将在命中后立即从您的项目中删除。

Procedure: 设置方法断点

* 点击方法声明行的装订区域。 或者，将文本光标置于方法声明处并按 `Ctrl+F8` (Windows), `⌘ F8` (macOS), `⌘ F8` (IntelliJ IDEA Classic (macOS)), `⌃ Quote` (macOS System Shortcuts), `Ctrl+F8` (XWin), `Ctrl+F8` (GNOME), `Ctrl+8` (KDE), `Ctrl+F8` (Emacs), `Ctrl+F8` (Sublime Text), `⌘ F8` (Sublime Text (macOS)), `F9` (Visual Studio), `F9` (Visual Studio (macOS)), `Ctrl+F8` (NetBeans), `Ctrl+Shift+B` (Eclipse), `⌘ ⇧ B` (Eclipse (macOS))。

![方法断点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/debug_method_breakpoint.png)

* 要在调用类的默认构造函数时挂起程序，请点击声明类所在行的标记栏。 或者，将文本光标放在类声明处并按 `Ctrl+F8` (Windows), `⌘ F8` (macOS), `⌘ F8` (IntelliJ IDEA Classic (macOS)), `⌃ Quote` (macOS System Shortcuts), `Ctrl+F8` (XWin), `Ctrl+F8` (GNOME), `Ctrl+8` (KDE), `Ctrl+F8` (Emacs), `Ctrl+F8` (Sublime Text), `⌘ F8` (Sublime Text (macOS)), `F9` (Visual Studio), `F9` (Visual Studio (macOS)), `Ctrl+F8` (NetBeans), `Ctrl+Shift+B` (Eclipse), `⌘ ⇧ B` (Eclipse (macOS))。

![在默认构造函数上设置的断点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/debug_constructor_breakpoint.png)

* 要定位多个类或方法，请从主菜单中选择  `运行 | 查看断点` ，然后点击   添加   `Alt+Insert` (Windows), `⌘ N` (macOS), `⌃ N` (IntelliJ IDEA Classic (macOS)), `⌘ N` (macOS System Shortcuts), `Alt+Insert` (XWin), `Alt+Insert` (GNOME), `Alt+Insert` (KDE), `Alt+Insert` (Emacs), `Ctrl+N` (Sublime Text), `⌘ N` (Sublime Text (macOS)), `Ctrl+N` (Visual Studio), `⌘ N` (Visual Studio (macOS)), `Alt+Insert` (NetBeans), `Alt+Insert` (Eclipse), `⌘ N` (Eclipse (macOS))，选择   Java 方法断点  并指定类和方法。 使用  `*`  来匹配标识符的开头、结尾或整个标识符。

![添加方法断点对话框](https://resources.jetbrains.com.cn/help/img/idea/2026.3/debug_method_breakpoint_menu.png)

语法示例：

|  类  |  方法  |  结果  |
| --- | --- | --- |
|   `*`   |   `打印`   |   `打印()`  所有类中的方法（具有任何参数列表）  |
|   `打印机`   |   `*`   |   `打印机`  类中的任何方法  |
|   `打印机`   |   `设置*`   |   `打印机`  类中的所有设置器  |
|   `*`   |   `*`   |  所有方法（例如，若您希望在启动后立即暂停应用程序）  |

Procedure: 设置字段断点

* 点击声明字段所在行的边距。 或者，将文本光标置于该行并按 `Ctrl+F8` (Windows), `⌘ F8` (macOS), `⌘ F8` (IntelliJ IDEA Classic (macOS)), `⌃ Quote` (macOS System Shortcuts), `Ctrl+F8` (XWin), `Ctrl+F8` (GNOME), `Ctrl+8` (KDE), `Ctrl+F8` (Emacs), `Ctrl+F8` (Sublime Text), `⌘ F8` (Sublime Text (macOS)), `F9` (Visual Studio), `F9` (Visual Studio (macOS)), `Ctrl+F8` (NetBeans), `Ctrl+Shift+B` (Eclipse), `⌘ ⇧ B` (Eclipse (macOS))。

![字段观察点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/debug_field_watchpoint.png)

Procedure: 设置异常断点

* 按 `Ctrl+Shift+F8` (Windows), `⌘ ⇧ F8` (macOS), `⌘ ⇧ F8` (IntelliJ IDEA Classic (macOS)), `⌘ ⇧ F8` (macOS System Shortcuts), `Ctrl+Shift+F8` (XWin), `Ctrl+Shift+F8` (GNOME), `Ctrl+Shift+8` (KDE), `Ctrl+Shift+F8` (Emacs), `Ctrl+Shift+F8` (Sublime Text), `⌘ ⇧ F8` (Sublime Text (macOS)), `Ctrl+Alt+B` (Visual Studio), `⌘ ⌥ B` (Visual Studio (macOS)), `Ctrl+Shift+F8` (NetBeans), `Ctrl+Shift+F8` (Eclipse), `⌘ ⇧ F8` (Eclipse (macOS)) 或从主菜单中选择  `运行 | 查看断点` 。 然后，根据异常的类型：

* 如果您希望在抛出任何 `Throwable` 实例时暂停程序，请在 Java 异常 下检查 任何 Exception 。

* 如果您希望在抛出特定异常或其子类时暂停程序，请点击对话框左上角的 添加 `Alt+Insert` (Windows), `⌘ N` (macOS), `⌃ N` (IntelliJ IDEA Classic (macOS)), `⌘ N` (macOS System Shortcuts), `Alt+Insert` (XWin), `Alt+Insert` (GNOME), `Alt+Insert` (KDE), `Alt+Insert` (Emacs), `Ctrl+N` (Sublime Text), `⌘ N` (Sublime Text (macOS)), `Ctrl+N` (Visual Studio), `⌘ N` (Visual Studio (macOS)), `Alt+Insert` (NetBeans), `Alt+Insert` (Eclipse), `⌘ N` (Eclipse (macOS))，并输入异常名称。

* 如果您在控制台中有异常的堆栈跟踪，可以使用异常名称附近的   创建断点   按钮为该异常设置断点。

![在控制台的堆栈跟踪附近创建断点内嵌](https://resources.jetbrains.com.cn/help/img/idea/2026.3/create-exception-breakpoint-from-console.png)

* 在编辑器中位于异常的声明或用法处时，可以使用上下文菜单 `Alt+Enter` (Windows), `⌥ ⏎` (macOS), `⌥ ⏎` (IntelliJ IDEA Classic (macOS)), `⌥ ⏎` (macOS System Shortcuts), `Alt+Enter` (XWin), `Alt+Enter` (GNOME), `Alt+Enter` (KDE), `Alt+Enter` (Emacs), `Alt+Enter` (Sublime Text), `⌥ ⏎` (Sublime Text (macOS)), `Alt+Enter` (Visual Studio), `⌥ ⏎` (Visual Studio (macOS)), `Alt+Enter` (NetBeans), `Ctrl+1` (Eclipse), `⌘ 1` (Eclipse (macOS)) 为此异常设置断点。

![在上下文菜单中创建异常断点选项](https://resources.jetbrains.com.cn/help/img/idea/2026.3/quick-fix-create-exception-breakpoint.png)

Procedure: 设置条件断点和日志断点

要设置仅在满足条件时暂停应用程序（条件断点）或记录消息（日志断点或日志点）的断点：

1. 在要设置断点的行或声明上右键点击。

2. 在出现的菜单中，分别选择   添加条件断点},{   或   添加日志断点  。

3. 在弹出的窗口中，指定条件或要记录结果的表达式。

更多信息，请参考 [断点条件](#breakpoint_condition) 和 [日志断点](#log)。

> **Tip:**
> 可以在日志表达式和条件中添加副作用以 [改变程序行为](altering-the-program-s-execution-flow.html)。

## 管理断点

Procedure: 移除断点

* 对于非异常断点：点击装订区域的断点。

* 对于所有断点：在主菜单中转到  `运行 | 查看断点`  `Ctrl+Shift+F8` (Windows), `⌘ ⇧ F8` (macOS), `⌘ ⇧ F8` (IntelliJ IDEA Classic (macOS)), `⌘ ⇧ F8` (macOS System Shortcuts), `Ctrl+Shift+F8` (XWin), `Ctrl+Shift+F8` (GNOME), `Ctrl+Shift+8` (KDE), `Ctrl+Shift+F8` (Emacs), `Ctrl+Shift+F8` (Sublime Text), `⌘ ⇧ F8` (Sublime Text (macOS)), `Ctrl+Alt+B` (Visual Studio), `⌘ ⌥ B` (Visual Studio (macOS)), `Ctrl+Shift+F8` (NetBeans), `Ctrl+Shift+F8` (Eclipse), `⌘ ⇧ F8` (Eclipse (macOS))，选择断点，然后点击   移除   或按 `Delete` (Windows), `⌦` (macOS), `⌦` (IntelliJ IDEA Classic (macOS)), `⌦` (macOS System Shortcuts), `Delete` (XWin), `Delete` (GNOME), `Delete` (KDE), `Delete` (Emacs), `Delete` (Sublime Text), `⌦` (Sublime Text (macOS)), `Delete` (Visual Studio), `⌦` (Visual Studio (macOS)), `Delete` (NetBeans), `Delete` (Eclipse), `⌦` (Eclipse (macOS))。

为了避免意外删除断点及其参数，您可以选择通过将它们拖到编辑器或点击鼠标中键来删除断点。 为此，请前往  `设置 | 构建、执行、部署 | 调试器` 并选择   拖动到编辑器，或用鼠标中键点击  。 点击断点将 [启用或禁用](#disable)它。

Procedure: 将断点静音

如果您暂时不需要在断点处暂停，可以将其  静音 。 这使您能够在不离开调试器会话的情况下恢复正常程序操作。 之后，您可以取消静音断点并继续调试。

* 点击   静音断点   按钮 ![静音断点按钮](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.muteBreakpoints.svg) 在   调试   工具窗口的工具栏中。

Procedure: 启用/禁用断点

当您移除断点时，其 [内部配置](#breakpoint-properties)会丢失。 若要在不丢失断点参数的情况下暂时关闭单个断点，您可以  disable  它：

* 对于非异常断点：右键点击并根据需要设置   已启用   选项。 或者，您也可以在按住 `Alt` (Windows), `Alt` (macOS), `Alt` (IntelliJ IDEA Classic (macOS)), `Alt` (macOS System Shortcuts), `Alt` (XWin), `Alt` (GNOME), `Alt` (KDE), `Alt` (Emacs), `Alt` (Sublime Text), `Alt` (Sublime Text (macOS)), `Alt` (Visual Studio), `Alt` (Visual Studio (macOS)), `Alt` (NetBeans), `Alt` (Eclipse), `Alt` (Eclipse (macOS)) 的同时点击断点，或使用鼠标中键点击断点。 对于鼠标中键，请检查未将删除断点操作 [分配给它](#remove)。

* 对所有断点：点击   运行 | 查看断点   `Ctrl+Shift+F8` (Windows), `⌘ ⇧ F8` (macOS), `⌘ ⇧ F8` (IntelliJ IDEA Classic (macOS)), `⌘ ⇧ F8` (macOS System Shortcuts), `Ctrl+Shift+F8` (XWin), `Ctrl+Shift+F8` (GNOME), `Ctrl+Shift+8` (KDE), `Ctrl+Shift+F8` (Emacs), `Ctrl+Shift+F8` (Sublime Text), `⌘ ⇧ F8` (Sublime Text (macOS)), `Ctrl+Alt+B` (Visual Studio), `⌘ ⌥ B` (Visual Studio (macOS)), `Ctrl+Shift+F8` (NetBeans), `Ctrl+Shift+F8` (Eclipse), `⌘ ⇧ F8` (Eclipse (macOS))，然后在列表中选中/取消选中断点。

Procedure: 移动 / 复制断点

* 要移动断点，请将其拖到另一行。

* 要复制断点，请按住 `Ctrl` (Windows), `Ctrl` (macOS), `Ctrl` (IntelliJ IDEA Classic (macOS)), `Ctrl` (macOS System Shortcuts), `Ctrl` (XWin), `Ctrl` (GNOME), `Ctrl` (KDE), `Ctrl` (Emacs), `Ctrl` (Sublime Text), `Ctrl` (Sublime Text (macOS)), `Ctrl` (Visual Studio), `Ctrl` (Visual Studio (macOS)), `Ctrl` (NetBeans), `Ctrl` (Eclipse), `Ctrl` (Eclipse (macOS))并将断点拖到另一行。 这将在目标位置创建具有相同参数的断点。

Procedure: 查看所有设置的断点

您可以在 [书签](bookmarks.html) 工具窗口中查看所有断点的列表。 当您在代码中设置断点后，断点会自动添加到工具窗口中的专用列表中。

* 在主菜单中，转到  `视图 | Tool Windows | 书签` 并展开   断点  列表。

![书签工具窗口](https://resources.jetbrains.com.cn/help/img/idea/2026.3/bookmarks-tool-window.png)

Procedure: 分组断点

您可以将断点组织到组中，例如，如果您需要标记出针对特定问题的断点。

* 在   断点  对话框 `Ctrl+Shift+F8` (Windows), `⌘ ⇧ F8` (macOS), `⌘ ⇧ F8` (IntelliJ IDEA Classic (macOS)), `⌘ ⇧ F8` (macOS System Shortcuts), `Ctrl+Shift+F8` (XWin), `Ctrl+Shift+F8` (GNOME), `Ctrl+Shift+F8` (KDE), `Ctrl+Shift+F8` (Emacs), `Ctrl+Shift+F8` (Sublime Text), `⌘ ⇧ F8` (Sublime Text (macOS)), `Alt+F9` (Visual Studio), `⌥ F9` (Visual Studio (macOS)), `Ctrl+Shift+F8` (NetBeans), `Ctrl+Shift+F8` (Eclipse), `⌘ ⇧ F8` (Eclipse (macOS))中，选择您想要放置在组中的断点，然后从菜单中选择  `移动到组` 。

## 配置断点的属性

根据断点类型，您可以配置附加属性，从而使其操作符合特定需求。 最常用的选项通过 [意图](#intentions)可用。

Procedure:

* 要访问断点意图，请将文本光标放在有断点的行上，然后按 `Alt+Enter` (Windows), `⌥ ⏎` (macOS), `⌥ ⏎` (IntelliJ IDEA Classic (macOS)), `⌥ ⏎` (macOS System Shortcuts), `Alt+Enter` (XWin), `Alt+Enter` (GNOME), `Alt+Enter` (KDE), `Alt+Enter` (Emacs), `Alt+Enter` (Sublime Text), `⌥ ⏎` (Sublime Text (macOS)), `Alt+Enter` (Visual Studio), `⌥ ⏎` (Visual Studio (macOS)), `Alt+Enter` (NetBeans), `Ctrl+1` (Eclipse), `⌘ 1` (Eclipse (macOS))。 在需要快速配置基本断点属性时，请使用此选项。

* 要访问完整的属性列表，请右键点击断点并点击   更多  或按 `Ctrl+Shift+F8` (Windows), `⌘ ⇧ F8` (macOS), `⌘ ⇧ F8` (IntelliJ IDEA Classic (macOS)), `⌘ ⇧ F8` (macOS System Shortcuts), `Ctrl+Shift+F8` (XWin), `Ctrl+Shift+F8` (GNOME), `Ctrl+Shift+8` (KDE), `Ctrl+Shift+F8` (Emacs), `Ctrl+Shift+F8` (Sublime Text), `⌘ ⇧ F8` (Sublime Text (macOS)), `Ctrl+Alt+B` (Visual Studio), `⌘ ⌥ B` (Visual Studio (macOS)), `Ctrl+Shift+F8` (NetBeans), `Ctrl+Shift+F8` (Eclipse), `⌘ ⇧ F8` (Eclipse (macOS))。

### 意图参考

|  意图  |  描述  |
| --- | --- |
|    删除断点    |  [移除](#remove)所选行的断点。  |
|    禁用断点    |  [禁用](#disable) 选定行的断点。  |
|    编辑断点    |  打开一个对话框，其中包含最常用的断点 [属性](#properties)。 更多属性，请点击   更多   或按 `Ctrl+Shift+F8` (Windows), `⌘ ⇧ F8` (macOS), `⌘ ⇧ F8` (IntelliJ IDEA Classic (macOS)), `⌘ ⇧ F8` (macOS System Shortcuts), `Ctrl+Shift+F8` (XWin), `Ctrl+Shift+F8` (GNOME), `Ctrl+Shift+8` (KDE), `Ctrl+Shift+F8` (Emacs), `Ctrl+Shift+F8` (Sublime Text), `⌘ ⇧ F8` (Sublime Text (macOS)), `Ctrl+Alt+B` (Visual Studio), `⌘ ⌥ B` (Visual Studio (macOS)), `Ctrl+Shift+F8` (NetBeans), `Ctrl+Shift+F8` (Eclipse), `⌘ ⇧ F8` (Eclipse (macOS))。  |
|    仅在类中停止    |  应用 [类过滤器](#filters) 排除从当前类派生的类。  |
|    不要停在 class 里    |  应用 [类过滤器](#filters)以排除当前类。  |
|    仅在当前对象中停止    |  仅将 [instance filter](#filters) 应用于包含当前实例并排除所有其他实例。 此操作仅在非静态方法中可用。  |
|    仅在被调用时停止    |  将 [调用者过滤器](#filters)应用于排除所有方法，除了对应于堆栈中前一帧的方法。  |
|    被调用时不要停止    |  将 [调用者过滤器](#filters) 应用于排除堆栈中对应于上一个框架的方法。  |

### 断点属性参考

在本章中，您可以找到有关断点功能的信息。

#### 已启用

取消选中此复选框以暂时禁用断点，而不将其从项目中移除。 禁用的断点将在单步执行期间被 [跳过](stepping-through-the-program.html)。

您可以配置 IntelliJ IDEA 以通过点击启用/禁用断点，而不是完全移除它们。 要执行此操作，请转到  `设置 | 构建、执行、部署 | 调试器` 并将   删除断点  选项设置为   拖动到编辑器或用中键点击  。

#### 挂起

指定在断点命中时是否暂停程序执行。

非挂起断点在您需要记录某个表达式而不暂停程序时非常有用（例如，当您需要知道方法被调用的次数时）或在您需要创建一个  触发 断点以在触发时启用 [依赖断点](#disable-until-hit)。

以下策略适用于暂停程序执行的断点：

* 全部 ：当任一线程触发断点时，所有线程都将被挂起。

* 线程 ：只有命中断点的线程会被挂起。

如果您想将某个策略用作默认策略，请点击   设为默认   按钮。

> **Tip:**
> 有关控制多个线程的更多信息，请参阅 [教程：检测并发问题](detect-concurrency-issues.html)。

#### 条件

该选项用于指定在每次命中断点时检查的条件。 如果条件计算结果为  `true`  ，则执行所选操作。 否则，断点将被忽略。

> **Note:**
> 断点设置的行必须满足条件。

表达式的结果取自 return 语句。 当没有 return 语句时，结果取自代码的最后一行。

在条件主体中，您可以使用：

* 多条语句，包括声明、循环、匿名类等

* `this` （在非静态上下文中），例如，引用当前异常： `!(this.entries.isEmpty())`

* [标签](examining-suspended-program.html#use-labels)以在您的表达式中包含跟踪的实例或检查其布尔字段： `trackedObject_DebugLabel.isComplete()`

对表达式求值时，请务必了解其可能的副作用，因为这些副作用可能会影响程序的行为和结果。

#### 日志选项

当断点被触发时，可将以下内容记录到控制台：

* “断点已触发”消息 ：一条类似 `Breakpoint reached at ocean.Whale.main(Whale.java:5)` 的日志消息。

* 堆栈跟踪 ：当前帧的堆栈跟踪。 如果您想在不中断程序执行的情况下检查导致此点的路径，这将非常有用。 如果任务是从另一个线程调度的，则堆栈跟踪还会包括来自该线程的 [异步帧](debug-asynchronous-code.html)。 要显示这些帧，请确保 插装代理 选项在 `设置 | 构建、执行、部署 | 调试器 | 异步堆栈跟踪` 下已启用（默认已启用）。 要从远程进程获取异步帧，请 [将调试器代理添加到远程 JVM](debug-asynchronous-code.html#async_stack_traces_remote)。

* 评估并记录 ：任意表达式的结果，例如， `"Initializing"` 或 `users.size()` 。 表达式会忽略任何访问修饰符，并在设置断点的行的上下文中进行求值。 表达式的结果取自 return 语句。 当没有 return 语句时，结果取自代码的最后一行，这行代码不必是表达式：文字常量也适用。 这可以用来生成自定义消息或在程序执行时跟踪一些值。 对表达式求值时，请务必了解其可能的副作用，因为这些副作用可能会影响程序的行为和结果。

Procedure: 设置日志断点

1. （可选）如果您想要记录的表达式在编辑器中显示在您面前，请选择它。

2. 按住 `Shift` (Windows), `Shift` (macOS), `Shift` (IntelliJ IDEA Classic (macOS)), `Shift` (macOS System Shortcuts), `Shift` (XWin), `Shift` (GNOME), `Shift` (KDE), `Shift` (Emacs), `Shift` (Sublime Text), `Shift` (Sublime Text (macOS)), `Shift` (Visual Studio), `Shift` (Visual Studio (macOS)), `Shift` (NetBeans), `Shift` (Eclipse), `Shift` (Eclipse (macOS)) 并点击边栏。

#### 命中后移除

指定断点在被命中一次后是否应从项目中移除。

#### 在命中以下断点之前禁用

当在   在命中以下断点之前禁用   框中选择断点时，它会作为当前断点的触发器。 这 [禁用](#enabled)当前断点，直到指定断点被触发。

您还可以选择是在发生这种情况后再次禁用它，还是保持启用状态。

此选项在您只需要在特定条件下或执行某些操作后挂起程序时很有用。 在这种情况下，触发断点通常不需要停止程序执行，并被设置为 [非暂停状态](#suspend_policy)。

#### 筛选器

IntelliJ IDEA调试器使您能够通过筛选类、实例和调用方法来微调断点操作，并仅在需要的地方暂停程序。

可用的筛选器类型如下：

* 捕获 class 过滤器 ：仅当异常将在指定类之一中被捕获时才允许您暂停程序。 仅适用于异常断点。

* 实例过滤器 ：仅当在特定对象实例上调用方法时才挂起程序。 这种类型的过滤器仅在非静态上下文中生效。

* 类过滤器 ：仅在特定类中挂起程序。 对于异常，此筛选器匹配抛出位置的类。

* 呼叫者过滤器 ：根据当前方法的调用方挂起程序。 选择是否仅在当前方法从某个特定方法调用（或未调用）时停在断点。 此筛选器仅适用于直接调用方；调用堆栈的其余部分不会影响断点。

如需设置过滤器，请点击文本字段附近的按钮并使用对话框，或以文本格式定义。 对于文本格式，请使用以下语法：

* 类和方法使用完全限定名指定。 如果通过类名指定过滤器，它会指向类本身及其所有通过继承使用其成员的子类。

* 您可以使用以 `*` 通配符开头或结尾的模式来定义类或方法组，例如 `*.Foo` 或 `java.*` 。 通过模式指定的过滤器指向完全限定名称与此模式匹配的类/方法。

* 对象实例使用实例 ID 指定。 当对象在范围内时，您可以在 变量 选项卡中找到对象 ID，也可以使用 [Memory](analyze-objects-in-the-jvm-heap.html)选项卡。

* 类名、调用方法、模式和实例 ID 用空格分隔。

* 要排除某个类或调用者方法，请在其名称前键入 `-` 。

* 在调用者过滤器中，请使用描述符来表示参数和返回类型，例如： `mypackage.MyObject.addString(Ljava/lang/String;)V` 。 有关描述符的详细信息，请参阅 [官方 Oracle 文档](https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.3)。

筛选示例：

|   `-java.* -sun.*`   |  一个忽略  `java`  和  `sun`  包内代码的类/捕获类筛选器。  |
|   `-package1.Class1.method1([Ljava/lang/String;)Ljava/util/List;`   |  一个调用者筛选器，用于排除  `method1`  中  `package1.Class1`  的调用，其签名如下：  `List method1(String[] input)` 。  |
|   `package1.Class1 *s2 -package3.Class3`   |  一个类/捕获类过滤器，将断点应用于  `package1.Class1`  中的代码，并应用于其完全限定名称以  `s2`  结尾的类中的代码，同时忽略  `package3.Class3`  类中的代码。  |

#### 通过次数

指定断点仅在被触发一定次数后才会生效。 这对于调试涉及在长时间运行的循环中暂停应用程序或选择性记录频繁事件的场景非常有用。

计数完成后，它会重置并重新开始。 这意味着如果   通过次数   设置为  `10` ，断点将在每第十次被触发时生效。

如果同时设置了   通过计数   和   条件  ，IntelliJ IDEA 首先满足条件，然后检查   通过计数  。

> **Note:**
> 当   通过计数  被设置时， [实例和类过滤器](#filters)不可用。

#### 字段访问/修改

|    字段访问    |  选择在读取字段时使观察点起作用。  |
|    字段修改    |  选择使监视点在字段被写入时工作。  |

> **Note:**
> 此属性仅适用于字段观察点。

#### 模拟

启用此选项后，IntelliJ IDEA 会在方法的第一条和最后一条语句处设置行断点组合，而不是使用较慢的“真正”方法断点。 模拟方法断点提高了调试性能，因此默认使用。

仅当您在调试远程代码，或者需要在没有行号信息的本机方法或类中设置断点时，我们才建议禁用此选项。

> **Note:**
> 此属性仅适用于方法断点。

#### 方法入口/出口

|    方法入口    |  选择在进入方法或其子代后使断点生效。  |
|    方法退出    |  选择在方法或其子方法返回之前使断点生效。  |

> **Note:**
> 此属性仅适用于方法断点。

#### 捕获/未捕获的异常

|    捕获异常    |  选择在捕获到指定异常时使断点起作用。  |
|    未捕获的异常    |  选择在未捕获指定异常时使断点起作用。 这使您能够检查程序状态，并在程序或线程因未处理的异常崩溃之前检测原因。  |

> **Note:**
> 此属性仅适用于异常断点。

## 断点状态

断点可能具有以下状态：

|  状态  |  描述  |
| --- | --- |
|  已验证  |  当您开始调试器会话后，调试器会检查是否技术上可以在断点处暂停程序。 如果是，则调试器将断点标记为  已验证 。  |
|  警告  |  如果技术上可以在断点处暂停程序，但存在相关问题，调试器会将断点状态设置为  warning 。 例如，当无法在某个方法的某个实现处暂停程序时，可能会发生这种情况。  |
|  无效  |  如果在断点处技术上无法暂停程序，调试器会将其标记为  无效 。 这经常发生是因为该行没有可执行代码。  |
|  非活动/依赖  |  当断点 [配置为在另一个断点被触发前禁用](#disable-until-hit)时，它会被标记为非活动/依赖状态，并且此事件尚未发生。  |
|  静音  |  所有断点都已暂时失效，因为它们已被 [静音](#mute)。  |
|  已禁用  |  此断点暂时处于非活动状态，因为它已被 [禁用](#disable)。  |
|  非挂起  |  此断点的 [挂起策略](#suspend_policy)设置为命中时不挂起执行。  |

## 断点图标

根据它们的 [类型](#breakpoint-types)和 [状态](#breakpoint-statuses)，中断点会被标记以下图标：

|  |  折线图  |  方法  |  Field  |  异常  |
| --- | --- | --- | --- | --- |
|  常规  |  ![行断点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_set_breakpoint.svg)  |  ![方法断点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_method_breakpoint.svg)  |  ![字段监视点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_field_breakpoint.svg)  |  ![异常断点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_exception_breakpoint.svg)  |
|  已禁用  |  ![禁用行断点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_disabled_breakpoint.svg)  |  ![禁用的方法断点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_disabled_method_breakpoint.svg)  |  ![禁用字段观察点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_disabled_field_breakpoint.svg)  |  ![禁用异常断点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_disabled_exception_breakpoint.svg)  |
|  已验证  |  ![已验证行断点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_verified_breakpoint.svg)  |  ![验证方法断点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_verified_method_breakpoint.svg)  |  ![已验证字段监视点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_verified_field_breakpoint.svg)  |  |
|  静音  |  ![静音行断点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_muted_breakpoint.svg)  |  ![静音方法断点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_muted_method_breakpoint.svg)  |  ![禁用字段监视点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_muted_field_breakpoint.svg)  |   |
|  非活动/依赖  |  ![不活跃/从属行断点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_dep_line_breakpoint.svg)  |  ![非活跃/依赖的方法断点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_dep_method_breakpoint.svg)  |  ![非活动/依赖字段断点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_dep_field_breakpoint.svg)  |  |
|  静音状态的非活动/依赖  |  ![静音非活跃/依赖行断点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_muted_dep_line_breakpoint.svg)  |  ![静音的非活动/依赖方法断点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_muted_dep_method_breakpoint.svg)  |  ![静音的非活动/依赖字段监视点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_muted_dep_field_breakpoint.svg)  |  |
|  静音已禁用  |  ![已禁用的行断点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_muted_disabled_breakpoint.svg)  |  ![静音 禁用 方法 断点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_muted_disabled_method_breakpoint.svg)  |  ![静音 已禁用 字段 观察点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_muted_disabled_field_breakpoint.svg)  |  |
|  非挂起  |  ![非挂起行断点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_no_suspend_breakpoint.svg)  |  ![非挂起方法断点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_no_suspend_method_breakpoint.svg)  |  ![非挂起字段监视点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_no_suspend_field_breakpoint.svg)  |  |
|  已验证的非挂起  |  ![已验证的非挂起行断点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_verified_no_suspend_breakpoint.svg)  |  ![已验证的非挂起方法断点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_verified_no_suspend_method_breakpoint.svg)  |  ![已验证的非挂起字段监视点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_verified_no_suspend_field_breakpoint.svg)  |  |
|  无效  |  ![无效断点](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.debugger.db_invalid_breakpoint.svg)  |

> **Note:**
> 提供的图标对应标准 IDE 主题。 自定义主题可能会使用不同的图标。

## 效率提示

使用断点进行“printf”调试
: 请使用 [非中断](#suspend_policy) [日志](#log)断点（在其他调试器中有时称为监视点）代替在您的代码中插入打印语句。 这提供了一种更灵活且集中的方式来处理调试日志消息。

更快速地设置日志断点
: 要设置一个 [不断点](#suspend_policy) [日志](#log)断点，请按住 `Shift` (Windows), `Shift` (macOS), `Shift` (IntelliJ IDEA Classic (macOS)), `Shift` (macOS System Shortcuts), `Shift` (XWin), `Shift` (GNOME), `Shift` (KDE), `Shift` (Emacs), `Shift` (Sublime Text), `Shift` (Sublime Text (macOS)), `Shift` (Visual Studio), `Shift` (Visual Studio (macOS)), `Shift` (NetBeans), `Shift` (Eclipse), `Shift` (Eclipse (macOS))并点击边栏。 这不会暂停程序执行，而是记录一条类似  `Breakpoint reached at ocean.Whale.main(Whale.java:5)` 的消息。 如果您想记录编辑器中面前的某个表达式，请在按住 `Shift` (Windows), `Shift` (macOS), `Shift` (IntelliJ IDEA Classic (macOS)), `Shift` (macOS System Shortcuts), `Shift` (XWin), `Shift` (GNOME), `Shift` (KDE), `Shift` (Emacs), `Shift` (Sublime Text), `Shift` (Sublime Text (macOS)), `Shift` (Visual Studio), `Shift` (Visual Studio (macOS)), `Shift` (NetBeans), `Shift` (Eclipse), `Shift` (Eclipse (macOS))并点击装订线之前先选择它。

添加断点描述
: 如果您的项目中有许多断点，您可以为这些断点添加描述以便于搜索。 要执行此操作，请右键点击   断点   对话框 `Ctrl+Shift+F8` (Windows), `⌘ ⇧ F8` (macOS), `⌘ ⇧ F8` (IntelliJ IDEA Classic (macOS)), `⌘ ⇧ F8` (macOS System Shortcuts), `Ctrl+Shift+F8` (XWin), `Ctrl+Shift+F8` (GNOME), `Ctrl+Shift+F8` (KDE), `Ctrl+Shift+F8` (Emacs), `Ctrl+Shift+F8` (Sublime Text), `⌘ ⇧ F8` (Sublime Text (macOS)), `Alt+F9` (Visual Studio), `⌥ F9` (Visual Studio (macOS)), `Ctrl+Shift+F8` (NetBeans), `Ctrl+Shift+F8` (Eclipse), `⌘ ⇧ F8` (Eclipse (macOS)) 中的一个断点，然后从菜单中选择   编辑说明  。 现在当您开始输入断点名称时，它会获得焦点。

Lambda 表达式与方法引用
: 由于 JVM 设计，方法引用不像 lambda 表达式那样在堆栈跟踪中提供有意义的信息。 此外，无法在方法引用上设置断点。 如果方法引用在关键地方降低了可追溯性，请考虑使用 lambda 来代替。

诊断致命错误的原因
: 当异常断点与  `Throwable` 一起工作时，您也可以使用它们在抛出  `错误` 的子类时暂停程序。 这对于调查诸如  `OutOfMemoryError`  和  `StackOverflowError`  之类错误的原因非常有用。 为它们设置异常断点后，您将能够查看程序崩溃前发生的情况。

测试您的程序是否存在并发问题
: 判断一个多线程程序在并发性方面是否稳健的一个好方法是使用仅在一个线程被命中时才中断的断点。 停止单个线程可能会暴露应用程序设计中的问题，这些问题在其他情况下不会显现。

