JavaRush /Java 博客 /Random-ZH /Intellij IDEA 中的调试:初学者指南
Roman Beekeeper
第 35 级

Intellij IDEA 中的调试:初学者指南

已在 Random-ZH 群组中发布
大家好,JavaRush 社区。今天我们将讨论调试:它是什么以及如何在 Intellij IDEA 中进行调试。 Intellij IDEA 中的调试:初学者指南 - 1本文面向那些对 Java Core 已经了解甚少的人。发布库将没有框架或复杂的流程。轻松步行。所以让自己舒服一点,让我们开始吧!

为什么需要调试?

让我们立即明确:没有没有错误的代码......这就是生活的方式。因此,如果代码不能按我们的预期工作,我们不应该立即变得软弱并放弃一切。 Intellij IDEA 中的调试:初学者指南 - 2但该怎么办呢?当然,您可以System.out.println尽可能地进行指示,然后仔细检查终端中的输出,希望能够找到错误。尽管如此,这是可能的......他们做到了,而且他们使用日志记录仔细地做到了这一点(您可以在此处阅读相关内容)。但如果可以在本地机器上运行代码,最好使用Debug。我想立即指出,在本文中,我们将考虑在 Intellij IDEA 中调试项目。如果您有兴趣阅读有关远程调试的内容,请参阅我们资源中的一篇文章

什么是调试

Intellij IDEA 中的调试:初学者指南 - 3调试是调试(检查)代码的过程,在执行过程中您可以停在指定位置并观察执行进度。了解程序在某个地方的状态。这就像你可以停止生命并从外面看一切一样。很酷,对吧?我们的目标是快速轻松地学习如何使用我们最喜欢的开发环境 Intellij IDEA 调试应用程序。

开始调试需要什么

我免费提供建议:当您阅读本文时,请执行此处描述的所有操作,幸运的是,这里有一切。你需要什么:
  1. Intellij IDEA开发环境2019.3.1及更高版本。如果有人没有,这里有一个链接,您可以下载它。下载社区版,因为我将使用它。
  2. 从 GitHub克隆项目并通过 IDEA 导入。
打开IDEA: Intellij IDEA 中的调试:初学者指南 - 4选择debug-presentation项目,点击确定,得到: Intellij IDEA 中的调试:初学者指南 - 5保留从外部源导入项目,Maven并点击完成。导入项目后,我们可以使用一个实例来描述该过程。

一点理论......我保证:D

要开始进行最小程度的调试,您需要了解什么是断点并了解开始所需的一些热键。 断点是一个特殊的标记,显示应用程序应停止的位置或状态。您可以通过左键单击左侧边栏或单击代码位置并按Ctrl + F8来设置断点。断点分为三种类型:每行一个标签、每个变量一个标签以及每个方法一个标签。它看起来像这样:
  • 每行:

    Intellij IDEA 中的调试:初学者指南 - 6

    如果表达式中有 lambda,那么 IDEA 会为您提供一个选择 - 将表达式放在整行上或专门放在 lambda 中:

    Intellij IDEA 中的调试:初学者指南 - 7
  • 每个方法:

    Intellij IDEA 中的调试:初学者指南 - 8
  • 每班

    Intellij IDEA 中的调试:初学者指南 - 9
可以按照与添加断点时相同的步骤来删除断点。在某些情况下,您需要使它们不活动(静音)。为此,在“调试”部分中,您可以找到一个图标 Intellij IDEA 中的调试:初学者指南 - 10,该图标将使所有断点处于非活动状态。要查看已经设置了哪些断点,可以转到左下角的“调试”并找到 图标 Intellij IDEA 中的调试:初学者指南 - 11,或者按Ctrl+Shift+F8Intellij IDEA 中的调试:初学者指南 - 12当我们转到断点列表时,我们会看到: Intellij IDEA 中的调试:初学者指南 - 13有两个预断点这里:
  • Bee.java:24 - 在 Bee 类第 24 行
  • Main.java:14 - 在 Main 类中的第 14 行
我想指出的是,当您克隆项目时,您将不会有这些断点:您需要自己设置它们!还有一个Java 异常断点部分。非常有用的东西。使用它,您可以添加隐式断点,以便程序在引发任何异常或特定异常之前停止。让我们为 RuntimeException 添加一个隐式断点。这很容易完成:在左上角有一个加号“+”。单击它并选择Java 异常断点Intellij IDEA 中的调试:初学者指南 - 14在出现的窗口中,写下需要添加的异常的名称,从建议列表中进行选择,然后单击确定Intellij IDEA 中的调试:初学者指南 - 15我们完成此教育计划并继续实践。

走吧,让我们进入调试的荒野

Intellij IDEA 中的调试:初学者指南 - 16由于我是一名遗传性养蜂人,为了调试演示,我创建了一个项目,描述蜜蜂采集花蜜、将花蜜加工成蜂蜜以及从蜂巢中获取蜂蜜的过程。根据项目根目录中的自述文件的文档,我们读到:预期行为- 从所有收集花蜜的花朵(作为双倍值)中,将收集到的蜂蜜量等于一半采集到的花蜜。该项目有以下类:
  • 蜜蜂——普通工蜂;
  • BeeQueen - 蜂王;
  • BeeHive - 蜂箱;
  • HoneyPlant - 采集蜂蜜的蜂蜜植物;
  • Main -public static void main()项目启动的方法所在的位置。
如果你运行该方法main(),结果发现不仅没有计算蜂蜜的数量,而且还出现错误...... Intellij IDEA 中的调试:初学者指南 - 17你需要看看哪里出了问题。从右下角的堆栈跟踪中,我们可以看到,在 中HoneyPlant.java:20,抛出了一个 RuntimeException: Intellij IDEA 中的调试:初学者指南 - 18这正是我们的情况:存在 RuntimeException,让我们添加对此类异常的搜索,如上所述,然后运行main()该方法调试模式。为此,请在 Intellij IDEA 中单击该方法之前的绿色三角形箭头main()Intellij IDEA 中的调试:初学者指南 - 19我们将在触发此图标的异常之前获取停止的程序 Intellij IDEA 中的调试:初学者指南 - 20Intellij IDEA 中的调试:初学者指南 - 21。要获取完整信息,您需要查看“调试”部分。它有Variables,它显示了应用程序这部分中可用的所有变量:
  • 花蜜=1.0;
  • 花蜜容量 = -1.0。
公平地抛出异常,因为蜂蜜植物中的花蜜量的值不能为负。但为什么会出现这种情况呢?毕竟,有一个检查,如果花蜜用完,则第 15-17 行返回零值:
if ( nectar == 0 ) {
         return 0;
}
但问题是它检查了错误的变量......这是代码中的一个错误。该程序不是检查花中花蜜的值(位于nectarCapacity变量中),而是检查进入该方法的花蜜的值,并且是他们想要从花蜜中获取的量。这就是第一个错误!因此,我们正确地表达并得到表达式:
if ( nectarCapacity == 0) {
         return 0;
}
接下来,我们main()在正常模式下运行该方法(Run `Main.main()`),没有更多错误,程序运行了:应用程序 Intellij IDEA 中的调试:初学者指南 - 22运行并给出了答案: “33.0 蜂蜜是由 7 只蜜蜂从 2 株蜂蜜植物中生产的” 一切都会好起来的,但答案是错误...都是因为在文档README 文件中写道,花蜜以 2 比 1 的比例变成蜂蜜:
## Documentation
Presentation based on honey getting process.

**Note**: 1 honey point = 2 nectar points
从主要方法可以看出,有两种蜜树,分别为 30 和 40 单位的花蜜,所以最终你应该得到 35 单位的蜂蜜。他写道 33. 另外两个单位去哪儿了?...现在我们就会知道!为此,我们需要在Main.main()第 28 行的方法中放置一个断点,beeHive.populateHoney()并在调试模式下运行main该方法: Intellij IDEA 中的调试:初学者指南 - 23让我们仔细看看这一点。程序在执行到第 28 行之前停止了。在底部我们看到“调试”部分,它描述了正在运行的应用程序的所有信息。正如已经提到的,变量部分包含可从应用程序的此部分访问的所有变量和对象。Frames部分显示了应用程序所经历的步骤,您可以查看上一步并获取所有本地数据。要使程序继续工作,可以按F9或绿色图标,如下所示: Intellij IDEA 中的调试:初学者指南 - 24要停止程序,需要单击红色方块: Intellij IDEA 中的调试:初学者指南 - 25要以调试模式重新启动应用程序,需要单击箭头: Intellij IDEA 中的调试:初学者指南 - 26接下来,要逐步完成应用程序,您可以使用两个键:
  • F8 - 浏览一段代码,不进入内部方法;
  • F7 - 浏览一段代码并进入内部方法。
因此,要让该方法进入运行状态beeHive.populateHoney(),我们需要按F7,然后我们继续: 接下来,我们使用该方法使用F8Intellij IDEA 中的调试:初学者指南 - 27进入调试模式到底,并描述该方法中发生的情况:
  • 第25行-Stream API用于从所有蜜蜂收集蜂蜜;
  • 第26行——在现有的基础上添加蜂蜜;
  • 第27行——分配给蜂王2单位蜂蜜;
  • 第28行——从蜂蜜总量中去掉这两个单位;
  • 第 29 行 - 子宫吃掉这种蜂蜜。
这就是这两个单位去的地方,万岁!与业务分析师沟通后,我们得出的结论是文档README 文件包含错误,需要更新。让我们更新 README 文件:
## Documentation
Presentation based on honey getting process.

**Note**:
*  1 honey point = 2 nectar points
*  2 honey point queen bee eats every time when beehive populates the honey.
就是这样:发现的所有错误都已修复,我们可以继续冷静地喝咖啡并以聪明的样子阅读JavaRush中心上的文章:)

总结

在这篇文章中我们发现:
  • 没有没有错误的工作,调试是解决错误的好方法;
  • 什么是断点以及它存在哪些类型;
  • 如何配置异常断点;
  • 如何在调试模式下导航。

待读文章

另请参阅我的其他文章:
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION