逐步执行程序
逐步调试是控制程序逐步执行的过程。
IntelliJ IDEA 提供了一组单步操作,具体使用取决于您的策略,例如您是需要直接跳到下一行还是检查中间的方法调用。
单步执行按钮位于 调试 窗口工具栏上。

步过
逐步执行当前代码行,并转到下一行,即使高亮行中有方法调用。 方法的实现被跳过,您将直接移动到调用者方法的下一行。
在此示例中,第 5 行即将执行。 如果您单步跳过,调试器会直接跳到第 6 行,而不会访问 count() 方法。
如果跳过的方法中有断点,调试器将停在断点处。 要跳过执行过程中的任何断点,请使用 强制步过。
步入
进入方法以显示其内部发生的情况。
如果一行中有多个方法调用,IntelliJ IDEA 会询问您要进入哪个方法。 此功能称为 智能步入。
您可以配置 智能步入 使其在每次同一行有多个方法调用时自动使用。 或者,只有当您 明确这样做时才可以调用它。 要配置此功能,请前往 并根据需要设置 始终使用智能步入 选项。
某些方法(例如,标准 Java 类的方法,如 系统 )会被 步入 跳过,因为您通常可能不需要调试它们。 您可以在 页面的 设置 对话框中(Ctrl+Alt+S )微调此列表。
智能步入
智能步入 在一行中有多个方法调用时非常有用,并且您希望具体指定要进入的方法。 此功能允许您选择您感兴趣的方法调用。
从 智能步入 菜单中选择
或按下 Shift+F7。
点击该方法。 或者,使用箭头键或 Tab 键选择方法,然后按 Enter 或 F7 确认选择。

您可以配置 智能步入(P) 以便在每次有多个方法调用时使用,而不是常规的 步入(I)。 这是在 进行的。
逐步跳出
跳出当前方法并将您带到调用方法。
退出代码块
退出当前执行的代码块,例如 if 语句或 for 循环,而不退出封闭方法。
在示例中,该操作退出了 for 循环。 请注意,循环仍会执行,并且会像我们逐步执行每次迭代一样将所有数字打印到控制台。
运行到光标处
直到光标位置为止继续执行。
将文本光标放置在您希望程序暂停的行。
从 运行到光标处 菜单中选择
或按下 Alt+F9。
此外,您可以通过将鼠标悬停在行上并点击 运行到光标处(C) 图标来 运行到光标处(C)。

您可以配置在 运行到光标处(C) 中点击行号时是否希望 工作。
在示例中, 运行到光标处 将继续执行并在 count() 方法之后停止,就像有一个断点一样。 如果跳过的代码中有实际的断点,程序将在到达它们时暂停。
要跳过任何断点,请使用 强制运行到光标。
使用运行到光标处测量执行时间
当您使用 运行到光标处 时,它会记录跳过代码片段的执行时间,并在边栏中标记每一行。 您可以使用这些标记导航到方法的实现,这些方法的行也会标记相同类型的性能标记。

要关闭此功能,请右键点击标记并选择 使用“运行到光标”禁用记录时间。
强制单步执行
方法的步骤即使该方法被常规 步入 跳过。
在示例中,我们直接跳到 System.out.println() 方法的实现,而常规的 步入 会继续到循环的下一次迭代。
强制运行到光标
继续执行直到到达插入符号的位置。 所有中途的断点都将被忽略。
将文本光标放置在您希望程序暂停的行。
从 强制运行到光标 菜单中选择
或按下 Ctrl+Alt+F9。
强制步过
单步跳过当前代码行并转到下一行,即使当前行中有方法调用。 如果在被调用方法中有断点,它们会被忽略。
重置帧
允许您撤销最后一个帧并恢复堆栈中的前一个帧。 例如,如果您不小心走得太远,或者想重新进入错过了关键点的函数,这可能会很有用。
请注意,此选项仅影响局部变量,并不会恢复整个程序的状态,因为它不会恢复静态和实例变量的值。 这可能导致程序流程发生变化。
在 线程 选项卡中,悬停在您想要重置的帧上,然后点击出现的 重置帧 按钮。

在示例中,丢弃帧会将您返回到 main() ,仿佛 count 从未执行过。 没有受到影响的静态变量或实例变量,但控制台输出,已经生成并且可以视为副作用,仍然存在。
排查被跳过的断点
IntelliJ IDEA 可能会在以下情况下跳过断点:
在单步执行或执行 运行到光标处 时,另一个线程中触发了断点
断点在代码块中被命中,该代码块由自动表达式或监视等功能进行评估。
如果这种情况发生在对您的调试会话至关重要的断点上,请按照以下步骤操作,以防止IntelliJ IDEA丢失它们:
执行单步操作或 运行到光标处 从一个 仅暂停当前线程的断点
关闭以下功能:
提高单步执行速度
调试器功能会消耗资源,并可能影响单步性能。 如果性能不理想,请按照本章提供的建议进行优化。
配置单步执行行为
按 Ctrl+Alt+S 打开设置,然后选择 。
选项 | 描述 |
|---|---|
跳过合成方法 | 选中此复选框可在调试时禁止进入合成方法(由编译器生成的方法)。 |
跳过构造函数 | 选中此复选框以在调试时禁止进入构造函数。 |
跳过加载器 | 选中此复选框以在调试时阻止进入类加载器。 |
跳过简单的getter | 选中此复选框以在调试时抑制进入简单的 getter 方法(即,仅用于返回必要值的方法)。 |
不要进入类 | 选中此复选框以在调试时禁止进入指定类。 类列表包含两种类型的条目:
默认情况下,该列表包含一些标准的 Java SDK 类模式,这样您就不必浪费时间进入 Java 类库。 请使用列表中的复选框临时禁用/启用特定模式。 请使用 |
在弹出帧时评估 finally 块 | 选择您是否希望在弹出框中评估 |
只恢复当前线程 | 如果需要在单步操作时仅恢复活动线程,请选中此复选框。 |