逐步执行程序逐步调试是控制程序逐步执行的过程。
在您 启动调试会话并 暂停程序之后,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 )微调此列表。
智能步入智能步入 在一行中有多个方法调用时非常有用,并且您希望具体指定要进入的方法。 此功能允许您选择您感兴趣的方法调用。
从 智能步入 菜单中选择 或按下 Shift+F7。
点击该方法。 或者,使用箭头键或 Tab 键选择方法,然后按 Enter 或 F7 确认选择。
您可以配置 智能步入(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!");
}
运行到光标处直到光标位置为止继续执行。
将文本光标放置在您希望程序暂停的行。
从 运行到光标处 菜单中选择 或按下 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();
}
}
}
强制运行到光标继续执行直到到达插入符号的位置。 所有中途的断点都将被忽略。
将文本光标放置在您希望程序暂停的行。
从 强制运行到光标 菜单中选择 或按下 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丢失它们:
执行单步操作或 运行到光标处 从一个 仅暂停当前线程的断点
关闭以下功能:
变量视图中的自动表达式
集合类的备用视图
toString() 对象视图
您可以在 外观与行为 | 通知 设置页面 Ctrl+Alt+S 配置调试器通知。 如需更多信息,请参阅 通知。
提高单步执行速度调试器功能会消耗资源,并可能影响单步性能。 如果性能不理想,请按照本章提供的建议进行优化。
使用 Overhead 功能来识别性能下降的原因。
如果您的项目不需要,请禁用或最小化使用以下功能:
方法断点和字段观察点
显示方法返回值 选项。 您可以在调试器工具栏的 更多 | 调试器设置 下访问它。
用于集合类的备用视图 选项 (设置 | 构建、执行、部署 | 调试器 | 数据视图 | Java)
“toString”对象视图 (设置 | 构建、执行、部署 | 调试器 | 数据视图 | Java)
简化 断点和观察点 的条件,尤其是那些经常触发的。
在调试会话期间,切换到包含更少元素的视图。
配置单步执行行为按 Ctrl+Alt+S 打开设置,然后选择 构建、执行、部署 | 调试器 | 单步调试。
选项
描述
跳过合成方法
选中此复选框可在调试时禁止进入合成方法(由编译器生成的方法)。
跳过构造函数
选中此复选框以在调试时禁止进入构造函数。
跳过加载器
选中此复选框以在调试时阻止进入类加载器。
跳过简单的getter
选中此复选框以在调试时抑制进入简单的 getter 方法(即,仅用于返回必要值的方法)。
不要进入类
选中此复选框以在调试时禁止进入指定类。 类列表包含两种类型的条目:
完全限定类名.
正则表达式(精确匹配或以“*”开头或结尾的模式,例如, java.*)。
默认情况下,该列表包含一些标准的 Java SDK 类模式,这样您就不必浪费时间进入 Java 类库。 请使用列表中的复选框临时禁用/启用特定模式。
请使用 、 和 按钮管理列表。
在弹出帧时评估 finally 块
选择您是否希望在弹出框中评估 finally 块,或者您希望在评估之前收到通知。
只恢复当前线程
如果需要在单步操作时仅恢复活动线程,请选中此复选框。
最后修改日期: 2025年 9月 22日自定义视图监控调试器开销