大家好,JavaRush 社区。今天我们将讨论调试:它是什么以及如何在 Intellij IDEA 中进行调试。 本文面向那些对 Java Core 已经了解甚少的人。发布库将没有框架或复杂的流程。轻松步行。所以让自己舒服一点,让我们开始吧!
的文档,我们读到:预期行为- 从所有收集花蜜的花朵(作为双倍值)中,将收集到的蜂蜜量等于一半采集到的花蜜。该项目有以下类:
文档README 文件中写道,花蜜以 2 比 1 的比例变成蜂蜜:
文档README 文件包含错误,需要更新。让我们更新 README 文件:
中心上的文章:)
为什么需要调试?
让我们立即明确:没有没有错误的代码......这就是生活的方式。因此,如果代码不能按我们的预期工作,我们不应该立即变得软弱并放弃一切。 但该怎么办呢?当然,您可以System.out.println
尽可能地进行指示,然后仔细检查终端中的输出,希望能够找到错误。尽管如此,这是可能的......他们做到了,而且他们使用日志记录仔细地做到了这一点(您可以在此处阅读相关内容)。但如果可以在本地机器上运行代码,最好使用Debug。我想立即指出,在本文中,我们将考虑在 Intellij IDEA 中调试项目。如果您有兴趣阅读有关远程调试的内容,请参阅我们资源中的一篇文章。
什么是调试
调试是调试(检查)代码的过程,在执行过程中您可以停在指定位置并观察执行进度。了解程序在某个地方的状态。这就像你可以停止生命并从外面看一切一样。很酷,对吧?我们的目标是快速轻松地学习如何使用我们最喜欢的开发环境 Intellij IDEA 调试应用程序。开始调试需要什么
我免费提供建议:当您阅读本文时,请执行此处描述的所有操作,幸运的是,这里有一切。你需要什么: 打开IDEA: 选择debug-presentation项目,点击确定,得到: 保留从外部源导入项目,Maven并点击完成。导入项目后,我们可以使用一个实例来描述该过程。一点理论......我保证:D
要开始进行最小程度的调试,您需要了解什么是断点并了解开始所需的一些热键。 断点是一个特殊的标记,显示应用程序应停止的位置或状态。您可以通过左键单击左侧边栏或单击代码位置并按Ctrl + F8来设置断点。断点分为三种类型:每行一个标签、每个变量一个标签以及每个方法一个标签。它看起来像这样:-
每行:
如果表达式中有 lambda,那么 IDEA 会为您提供一个选择 - 将表达式放在整行上或专门放在 lambda 中:
-
每个方法:
-
每班
- Bee.java:24 - 在 Bee 类第 24 行
- Main.java:14 - 在 Main 类中的第 14 行
走吧,让我们进入调试的荒野
由于我是一名遗传性养蜂人,为了调试演示,我创建了一个项目,描述蜜蜂采集花蜜、将花蜜加工成蜂蜜以及从蜂巢中获取蜂蜜的过程。根据项目根目录中的自述文件- 蜜蜂——普通工蜂;
- BeeQueen - 蜂王;
- BeeHive - 蜂箱;
- HoneyPlant - 采集蜂蜜的蜂蜜植物;
- Main -
public static void main()
项目启动的方法所在的位置。
main()
,结果发现不仅没有计算蜂蜜的数量,而且还出现错误...... 你需要看看哪里出了问题。从右下角的堆栈跟踪中,我们可以看到,在 中HoneyPlant.java:20
,抛出了一个 RuntimeException: 这正是我们的情况:存在 RuntimeException,让我们添加对此类异常的搜索,如上所述,然后运行main()
该方法调试模式。为此,请在 Intellij IDEA 中单击该方法之前的绿色三角形箭头main()
: 我们将在触发此图标的异常之前获取停止的程序 。要获取完整信息,您需要查看“调试”部分。它有Variables,它显示了应用程序这部分中可用的所有变量:
- 花蜜=1.0;
- 花蜜容量 = -1.0。
if ( nectar == 0 ) {
return 0;
}
但问题是它检查了错误的变量......这是代码中的一个错误。该程序不是检查花中花蜜的值(位于nectarCapacity变量中),而是检查进入该方法的花蜜的值,并且是他们想要从花蜜中获取的量。这就是第一个错误!因此,我们正确地表达并得到表达式:
if ( nectarCapacity == 0) {
return 0;
}
接下来,我们main()
在正常模式下运行该方法(Run `Main.main()`)
,没有更多错误,程序运行了:应用程序 运行并给出了答案: “33.0 蜂蜜是由 7 只蜜蜂从 2 株蜂蜜植物中生产的” 一切都会好起来的,但答案是错误...都是因为在## Documentation
Presentation based on honey getting process.
**Note**: 1 honey point = 2 nectar points
从主要方法可以看出,有两种蜜树,分别为 30 和 40 单位的花蜜,所以最终你应该得到 35 单位的蜂蜜。他写道 33. 另外两个单位去哪儿了?...现在我们就会知道!为此,我们需要在Main.main()
第 28 行的方法中放置一个断点,beeHive.populateHoney()
并在调试模式下运行main
该方法: 让我们仔细看看这一点。程序在执行到第 28 行之前停止了。在底部我们看到“调试”部分,它描述了正在运行的应用程序的所有信息。正如已经提到的,变量部分包含可从应用程序的此部分访问的所有变量和对象。Frames部分显示了应用程序所经历的步骤,您可以查看上一步并获取所有本地数据。要使程序继续工作,可以按F9或绿色图标,如下所示: 要停止程序,需要单击红色方块: 要以调试模式重新启动应用程序,需要单击箭头: 接下来,要逐步完成应用程序,您可以使用两个键:
- F8 - 浏览一段代码,不进入内部方法;
- F7 - 浏览一段代码并进入内部方法。
beeHive.populateHoney()
,我们需要按F7,然后我们继续: 接下来,我们使用该方法使用F8进入调试模式到底,并描述该方法中发生的情况:
- 第25行-Stream API用于从所有蜜蜂收集蜂蜜;
- 第26行——在现有的基础上添加蜂蜜;
- 第27行——分配给蜂王2单位蜂蜜;
- 第28行——从蜂蜜总量中去掉这两个单位;
- 第 29 行 - 子宫吃掉这种蜂蜜。
## 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总结
在这篇文章中我们发现:- 没有没有错误的工作,调试是解决错误的好方法;
- 什么是断点以及它存在哪些类型;
- 如何配置异常断点;
- 如何在调试模式下导航。
GO TO FULL VERSION