IntelliJ IDEA 2025.1 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() 方法之后停止,就像有一个断点一样。 如果跳过的代码中有实际的断点,程序将在到达它们时暂停。

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

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

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

编辑器边栏中的性能统计

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

强制单步执行

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

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 块,或者您希望在评估之前收到通知。

只恢复当前线程

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

最后修改日期: 2025年 4月 24日