逐步执行程序

世界杯球童 2025-11-01 23:28:22 8808

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

在您 启动调试会话并 暂停程序之后,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日自定义视图监控调试器开销

站点统计