IntelliJ IDEA 2025.3 Help

逐步执行程序

逐步调试是控制程序逐步执行的过程。

在您 启动调试会话并 暂停程序之后,IntelliJ IDEA 为您提供了一组单步操作。 选择特定的步进操作取决于您的策略,例如,您是否需要直接跳到下一行,或者也需要 检查中间的方法调用。

步进按钮位于 调试 工具窗口 工具栏上。

调试工具窗口中的单步执行按钮

步过

逐步执行当前代码行,并转到下一行,即使高亮行中有方法调用。 方法的实现被跳过,您将直接移动到调用者方法的下一行。

public static void main(String[] args) { // the program is suspended here count(10); System.out.printIn("Count complete!"); }

在示例中,即将执行第 5 行。 如果您逐步跳过,调试器将直接移动到第 6 行,而不会访问 count() 方法。

public static void main(String[] args) { count(10); // execution point moves here after Step Over System.out.printIn("Count complete!"); }

如果跳过的方法中有断点,调试器将停在断点处。 要跳过执行过程中的任何断点,请使用 强制步过

步入

进入方法以显示其内部发生的情况。

public static void main(String[] args) { // the program is suspended here count(10); System.out.printIn("Count complete!"); }
private static void count(int to) { // after Step Into, the program enters the count() method and for (int i = 0; i < 10; i++) { System.out.println(i); } }

如果一行中有多个方法调用,IntelliJ IDEA 会询问您要进入哪个方法。 此功能称为 智能步入

您可以配置 智能步入 使其在每次同一行有多个方法调用时自动使用。 或者,只有当您 明确这样做时才可以调用它。 要配置此功能,请前往 设置 | 构建、执行、部署 | 调试器 | 单步执行 并根据需要设置 始终使用智能步入 选项。

某些方法(例如,标准 Java 类的方法,如 系统 )会被 步入 跳过,因为您通常可能不需要调试它们。 您可以在 构建、执行、部署 | 调试器 | 单步调试 页面的 设置 对话框中(Ctrl+Alt+S )微调此列表。

智能步入

智能步入 在一行中有多个方法调用时非常有用,并且您希望具体指定要进入的方法。 此功能允许您选择您感兴趣的方法调用。

  1. 菜单中选择 智能步入 ,或按下 Shift+F7

  2. 点击该方法。 或者,使用箭头键或 Tab 键选择方法,然后按 EnterF7 确认选择。

    智能步入允许您决定进入哪个方法

您可以配置 智能步入(P) 以便在每次有多个方法调用时使用,而不是常规的 步入(I)。 这是在 设置 | 构建、执行、部署 | 调试器 | 步进 进行的。

步出

跳出当前方法并将您带到调用方法。

private static void count(int to) { // the program is suspended here for (int i = 0; i < 10; i++) { System.out.println(i); } }
public static void main(String[] args) { count(10); // after Step Out, the program exits the count() method System.out.printIn("Count complete!"); }

退出代码块

退出当前执行的代码块,例如 if 语句或 for 循环,而不退出封闭方法。

static void count(int to) { for (int i = 0; i < to; i++) { // the program is suspended here System.out.println(i); } System.out.println("Complete!"); }

在示例中,该操作退出了 for 循环。 请注意,循环仍会执行,并且会像逐步执行每次迭代一样将所有数字打印到控制台。

static void count(int to) { for (int i = 0; i < to; i++) { System.out.println(i); } // Step Out of Code Block takes us here System.out.println("Complete!"); }

运行至光标处

直到光标位置为止继续执行。

  1. 将光标放在您希望程序暂停的行上。

  2. 菜单中选择 运行至光标处 ,或按下 Alt+F9

此外,您可以通过将鼠标悬停在行上并点击 运行到光标处(C) 图标来 运行到光标处(C)

点击即可运行到光标处

您可以配置在 运行到光标处(C) 中点击行号时是否希望 设置 | 构建、执行、部署 | 调试器 工作。

在示例中, 运行至光标处 将继续执行并在 count() 方法后停止,就像有一个断点一样。 如果跳过的代码中有实际的断点,程序将在到达它们时暂停。

要跳过任何断点,请使用 强制运行到光标

在多线程执行的情况下, 运行至光标处 会尽量保持在当前线程或协程中进行步进。 如果其他线程在原始线程之前到达目标行,IntelliJ IDEA将会保持后到达的线程,并等待原始线程赶上1秒。 超时后,IntelliJ IDEA将在后到达的线程中暂停程序,并通知您。 如果有更多线程或协程到达目的地, 运行至光标处 默认等待当前线程,并恢复之前被暂停的线程。

使用运行到光标测量执行时间

当您使用 运行至光标处 时,它会记录跳过代码片段的执行时间,并在边栏中标记每一行。 您可以使用这些标记导航到方法的实现,这些方法的行也会用相同类型的性能标记标记。

编辑器边栏中的性能统计

要关闭此功能,请右键点击标记并选择 使用“运行到光标”禁用记录时间

强制单步执行

方法的步骤即使该方法被常规 步入 跳过

static void count(int to) { for (int i = 0; i < to; i++) { // the program is suspended here System.out.println(i); } System.out.println("Complete!"); }

在示例中,我们直接跳到 System.out.println() 方法的实现,而常规的 步入 会继续到循环的下一次迭代。

public void println(String x) { // Force Step Into enters the implementation of PrintStream.println() if (getClass() == PrintStream.class) { writeln(String.valueOf(x)); } else { synchronized (this) { print(x); newLine(); } } }

强制运行到光标

继续执行直到到达光标位置。 所有中途的断点都将被忽略。

  1. 将光标放在您希望程序暂停的行上。

  2. 菜单中选择 强制运行至光标处 ,或按下 Ctrl+Alt+F9

强制步过

逐步跳过当前代码行并转到下一行,即使当前行中有方法调用。 如果在被调用方法中有断点,它们会被忽略。

重置帧

允许您撤销最后一个帧并恢复堆栈中的前一个帧。 例如,如果您不小心走得太远,或者想重新进入错过了关键点的函数,这可能会很有用。

请注意,此选项仅影响局部变量,并不会恢复整个程序的状态,因为它不会恢复静态和实例变量的值。 这可能导致程序流程发生变化。

  • 线程 选项卡中,将鼠标悬停在您想要重置的帧上,然后点击出现的 重置帧 按钮。

    线程选项卡中的重置帧按钮
public static void main(String[] args) { count(10); System.out.println("Count complete!"); } private static void count(int to) { for (int i = 0; i < to; i++) { // the program is suspended here System.out.println(i); } }

在示例中,丢弃帧会将您返回到 main() ,仿佛 count 从未执行过。 没有受到影响的静态变量或实例变量,但控制台输出,已经生成并且可以视为副作用,仍然存在。

public static void main(String[] args) { // Reset Frame returns the execution to the line preceding the last method call count(10); System.out.println("Count complete!"); } private static void count(int to) { for (int i = 0; i < to; i++) { System.out.println(i); } }

排查被跳过的断点

IntelliJ IDEA 可能会在以下情况下跳过断点:

  • 在单步执行或执行 运行至光标处 时,另一个线程中触发了断点

  • 断点在代码块中被命中,该代码块由自动表达式或监视等功能进行评估。

如果这种情况发生在对您的调试会话至关重要的断点上,请按照以下步骤操作,以防止IntelliJ IDEA丢失它们:

提高单步执行速度

调试器功能会消耗资源,并可能影响单步性能。 如果性能不理想,请按照本章提供的建议进行优化。

  • 使用 Overhead 功能来识别性能下降的原因。

  • 如果您的项目不需要,请禁用或最小化使用以下功能:

    • 方法断点和字段观察点

    • 显示方法返回值 选项。 您可以在调试器工具栏的 更多 | 调试器设置 下访问它。

    • 用于集合类的备用视图 选项 (设置 | 构建、执行、部署 | 调试器 | 数据视图 | Java)

    • “toString”对象视图设置 | 构建、执行、部署 | 调试器 | 数据视图 | Java

  • 简化 断点和观察点 的条件,尤其是那些经常触发的。

  • 在调试会话期间,切换到包含更少元素的视图。

配置单步执行行为

  • Ctrl+Alt+S 打开设置,然后选择 构建、执行、部署 | 调试器 | 单步调试

选项

描述

跳过合成方法

选中此复选框可在调试时禁止进入合成方法(由编译器生成的方法)。

跳过构造函数

选中此复选框以在调试时禁止进入构造函数。

跳过加载器

选中此复选框以在调试时阻止进入类加载器。

跳过简单的getter

选中此复选框以在调试时抑制进入简单的 getter 方法(即,仅用于返回必要值的方法)。

不要进入类

选中此复选框以在调试时禁止进入指定类。 类列表包含两种类型的条目:

  • 完全限定类名。

  • 正则表达式(精确匹配或以“*”开头或结尾的模式,例如, java.*)。

默认情况下,该列表包含一些标准的 Java SDK 类模式,这样您就不必浪费时间进入 Java 类库。 请使用列表中的复选框临时禁用/启用特定模式。

请使用 添加类添加模式移除 按钮管理列表。

在弹出帧时评估 finally 块

选择您是否希望在弹出框中评估 finally 块,或者您希望在评估之前收到通知。

只恢复当前线程

如果需要在单步操作时仅恢复活动线程,请选中此复选框。

2026年 1月 23日