分步 是控制程序逐步执行的过程。
IntelliJ IDEA 提供了一组步进操作,具体取决于您的策略使用(例如,您是否需要直接进入下一行或在此途中输入调用的方法)。
步进按钮位于“调试”工具窗口工具栏上。
越过 「Step Over 」
即使当前突出显示的行中包含方法调用,也将单步执行到当前代码行并带您到下一行。方法的实现将被跳过,您将直接移至调用者方法的下一行。
- 单击“Step Over”按钮 或按 F8。
在该示例中,将执行第 5 行。如果您跳过,调试器将直接移至第 6 行,而无需跳入该count()
方法。
如果跳过的方法中有断点,调试器将在它们处停止。要跳过途中的任何断点,请使用“强制跨步” (opens new window)。
步入「step into」
逐步介绍该方法中发生的事情。如果不确定方法是否返回正确的结果,请使用此选项。
- 单击 Step into 执行按钮 或按 F7。
在该示例中,将执行第 5 行。如果您介入,调试器将跳入该count(int to)
方法的实现,使您可以详细检查其结果是如何产生的。
如果线路上有多个方法调用,则 IntelliJ IDEA 会询问您要输入哪种方法。此功能称为“智能步进” (opens new window)。
您可以将 Smart Step Into 配置为在线路上有多个方法调用时自动使用。或者,仅当您明确地 (opens new window)调用时,才可以调用它 。要配置此功能,请转到 “设置/首选项” |“设置”。构建,执行,部署| 调试器 步进 并设置始终做智能步入根据需要选择。
由于通常不需要调试它们,因此 某些方法(例如的标准 Java 类方法System
)会被 Step 跳过。此列表可以在“构建,执行,部署” |“发布”中进行微调。调试器 步进的页面设置/首选项对话框 ⌘,。
智能步入 「Smart step into」
当一行上有多个方法调用,并且您想具体说明要输入哪种方法时,智能步入很有用。此功能使您可以选择感兴趣的方法调用。
- 从主菜单中,选择 Run | Debugging Actions | Smart Step Into 或 按 ⇧F7。
- 单击方法。您也可以使用箭头键或选项卡选择它,然后按 ⏎/ F7。
每次在线上有多个方法调用时,都 可以配置要使用的智能步进而不是常规 步进。这是在 Settings/Preferences | Build, Execution, Deployment | Debugger | Stepping .
走出去 「Step out」
退出当前方法,然后转到调用者方法。
- 单击“单步执行”按钮 或按 ⇧F8。
在示例中,单步执行将跳过循环的所有迭代,并直接进入main
方法(调用方)。
跳出代码块「Step out of code block」
退出当前执行的代码块。这使您可以跳过剩余的迭代 while
,for
并且都没有离开封闭的方法。
- 从主菜单中,选择 Run | Debugging Actions | Step Out of Code Block.
在该示例中,该动作退出for
循环,并带我们到第 12 行。请注意,循环无论如何都已执行,并且输出在控制台中可见,就像我们逐步完成了每个迭代一样。
运行到光标「Run to cursor」
继续执行直到插入符号的位置。
- 将插入号放在您要程序暂停的行上。
- 单击运行至光标按钮 或按 ⌥F9。
另外,您可以通过单击装订线中的行号来运行到光标。
您可以配置是否要运行“游标”以单击“设置/首选项” |“行”中的行号。 构建,执行,部署| 调试器。
在该示例中,“运行到游标”将继续执行并在第 7 行停止,就好像存在断点一样。如果方法中有断点count()
,则程序将在那里暂停。
要跳过途中的任何断点,请使用强制运行到光标 (opens new window)。
强制进入 「Force step into」
即使常规 Step Into跳过 (opens new window)了此方法,也要执行该方法中的步骤。
- 单击“强制进入”按钮 或按 ⌥⇧F7。
在该示例中,执行将在要调用的行之前暂停 System.out.println()
。
使用 Force Step Into,我们可以直接进入System.out.println()
方法的实现 ,而常规的 Step Into 将使我们进入第 20 行。
强制运行到光标 「Force run to cursor」
继续执行直到插入符号的位置。途中的所有断点都将被忽略。
- 将插入号放在您要程序暂停的行上。
- 从主菜单中,选择 Run | Debugging Actions | Force Run to Cursor 或按 ⌥⌘F9。
在该示例中,“强制运行至光标”将继续执行并在第 7 行停止,就好像有一个断点一样。内部的断点count()
将不起作用。
强制越过 「force-step-over」
即使当前突出显示的行中包含方法调用,也将单步执行到当前代码行并带您到下一行。如果被调用的方法中有断点,则将其忽略。
- 从主菜单中,选择 运行| 强制跨步 或按 ⌥⇧F8。
在该示例中,即使count()
方法中有断点,强制步进也会将您带到第 6 行的打印语句,否则,如果使用步进,则会在循环的所有迭代中暂停应用程序。
落架「drop-frame」
允许您撤消最后一帧并恢复堆栈中的前一帧。例如,如果您错误地走得太远,或者想重新进入错过关键点的功能,这可能会很有用。
请注意,此选项仅影响局部变量,不会恢复程序的整体状态,因为它不会还原静态变量和实例变量的值。这可能会导致程序流程更改。
- 单击“落帧”按钮 。
在示例中,放下框架将使您返回到调用方方法,就好像count
从未执行过一样。
没有受影响的静态或实例变量,但是控制台输出保持不变。
0
1
2
注意
丢帧 不等于回到过去。在调试应用程序时,请记住这一点。