教程:调试您的第一个 Java 应用程序
您已 创建并运行了您的 Java 应用程序。 假设您发现它的运行方式并不符合您的预期。 例如,它返回错误的值,或者因异常而崩溃。 看起来您的代码中存在错误,是时候对其进行调试了。
什么是调试?
广义而言,调试是检测并纠正程序中错误的过程。
错误有不同类型,您需要加以处理。 其中一些很容易捕获,例如语法错误,因为编译器会处理它们。 另一个简单的情况是,当通过查看堆栈跟踪可以快速识别错误时,这有助于您找出原因。
但是,也有非常棘手的错误,查找和修复可能需要很长时间。 例如,一个微妙的逻辑错误,可能在程序早期发生,但直到很晚才表现出来,这使得解决问题变得非常具有挑战性。
这就是 调试器的用武之地。 它是一种工具,通过提供对程序内部操作的洞察,以高效的方式帮助您找到错误。 这可以通过在指定点暂停执行、分析程序状态,并在必要时逐步推进执行来实现。 在调试期间,您可以完全掌控一切。 在本指南中,我们将介绍一个基本的调试场景,帮助您入门。
检查代码
让我们尝试一个简单的调试示例。 假设我们有以下应用程序:
该程序应计算作为命令行参数传入的所有值的平均值。
它可以正常编译并运行;但是,结果并非如预期。 例如,当我们传递 1 2 3 作为输入时,结果是 6.0。
首先,您需要考虑错误可能来自哪里。 我们可以假设问题不在 print 语句中。 很可能,意外结果来自我们的 findAverage 方法。 为找出原因,让我们在运行时检查其行为。
设置断点
为了调查这个错误,我们需要在程序到达产生错误结果的代码片段时暂停程序。 这是通过设置断点来完成的。 断点 用于指示程序将被挂起以便您检查其状态的代码行。
点击
findAverage方法被调用的那行的行号栏。
以调试模式运行程序
现在让我们以调试模式启动程序。
由于在运行和调试程序时需要传递参数,请确保 运行/调试配置中包含这些参数。
在装订区域中单击 运行 图标,然后选择 修改运行配置。

在 程序参数 字段中输入
1 2 3。
单击
main方法附近的 运行 按钮。 在菜单中选择 调试。
分析程序状态
调试会话启动后,程序会正常运行,直到遇到断点。 此时,IntelliJ IDEA会暂停程序,高亮显示程序暂停的那一行,并显示 调试 工具窗口。

高亮显示的行尚未执行。 程序现在正在等待您的进一步指令。 挂起状态允许您检查保存程序状态的变量。
由于 findAverage 方法尚未被调用,其所有局部变量(如 结果 )尚未进入作用域,但我们可以检查 args 数组的内容(args 在 main 方法的作用域内)。 变量的内容会内联显示在 args 被使用的地方:

您还可以在 调试 工具窗口中的 线程与变量 选项卡上获取当前处于作用域内的所有变量信息。

逐步执行程序
现在我们对 调试 工具窗口很熟悉了,是时候 单步调试findAverage 方法,并查看其内部发生了什么。
要逐步进入方法,请点击 调试 工具窗口工具栏上的 步入 按钮,或按 F7。

编辑器中的高亮显示移动到另一行,因为我们将执行点向前推进了一步。
让我们继续单步执行,看看局部变量
结果是如何声明的,以及它在循环的每次迭代中如何发生变化。
此时,变量
秒包含的值是"3"。 它将被转换为 Integer ,并添加到结果中,后者当前的值为3.0。 到目前为止没有错误。 求和计算正确。再执行两步,我们就到了
return语句,并且看到了遗漏之处。 我们在返回结果(其值为6.0)时,没有将其除以参数的数量。 这就是程序输出不正确的原因。
让我们更正该错误:
return result / input.length;
停止调试会话并重新运行程序
为检查程序是否正常工作,先停止调试会话并重新运行程序。
在 调试 工具窗口的工具栏中,点击 Stop 按钮或按下 Ctrl+F2。

单击
main方法附近的 运行 按钮。 在菜单中选择 运行。
请验证程序现在是否正常运行。
