记录一次intellij idea中的下断点过程

前言:

​ 最近在学习某个看起来有点复杂的框架,我想知道它的数据访问是如何发生的。所以我选择对foodCartViewRepository进行操作的方法下断点,看看这些函数是何时被调用的。

以下的操作都是在intellij idea中完成的。

行断点和logger

一开始的时候,我选择的是很传统的行断点。

image-20211023222827695

然后在我开始调试的时候,我哭了,因为我没想到这个断点一直被触发,导致程序的运行磕磕绊绊的,很是难受

后来我想到了,使用logger来输出一些相关的对象

image-20211023223532951

这样的方式是很好的,程序运行起来的时候不会出现磕磕绊绊的,并且可以在“非调试”环境下观察程序的运行情况

然而这样的方式好像有一个缺点,在需要观察多个函数的执行情况的时候, 需要在很多地方写很多麻烦的log代码。感觉这样好像也不是太方便

字段断点

后面我思考了以下,我原本只想知道的是foodCartViewRepository这个对象的执行情况。

并且,在 intellij idea中,可以设置“高级”断点。

foodCartViewRepository字段的行号右边点击一下,就可以创建出针对这个字段的断点(图标是一个眼睛的形状)。

image-20211023224231237

当我们右击这个眼睛的时候,可以在弹窗中,对这个断点的细节进行设置。

image-20211023224208441

取消勾选Suspend这个框后,可以发现眼睛变成了黄色,这表示程序不会暂停(Suspend)在这个地方,这样就不会出现磕磕绊绊的情况了。

image-20211023225037101

这时读者可能会想,不能暂停的断点有啥用呢?其实就算是程序不能暂停,我们仍然可以像使用logger那样,获取一些程序的执行情况。

对刚才那个断点,我们可以进行下面的设置,这样就可以提供类似logger的功能了。

image-20211023230011846

以调试模式运行程序,我们可以看到一些这个断点给我们提供的信息!

image-20211023225927803

但是,我发现,程序的启动变得十分缓慢,从点击调试运行的按钮到程序完全启动,大概花了一两分钟。然而,在非调试情况下(正常模式),程序的启动只需要十秒左右。因此,开启“字段断点”后的调试启动速度让人有点“难以接受”。

综合使用断点

我发现,可以在程序刚开始运行的时候,mute所有的断点

image-20211023230831650

于是,一开始程序运行的时候,这些断点是出于Muted的状态的,在我认为程序完全启动之后,我手动unmute这些断点。经过测试,程序的启动速度确实变快了不少,然而,在我unmute这些断点后,我发现,这些断点并没有给我任何log信息。原来是我手动unmute断点的时间晚了。只要在程序完全启动的时候,unmute断点,这样,我就不会错过断点了

下图的红框中的设置,表明我们可以在某个断点出发后,启用这个断点。

image-20211023231500960

在SpringBoot项目完全启动后,下一个断点在自己的代码上。这个断点用来“通知”foodCartViewRepository断点,这个断点是黄色的,因为程序不会暂停Suspend在这里

image-20211023231932630

然后针对foodCartViewRepository字段断点(注意黄框,这个断点是Enabled的,只是,在红框中的设置,使得这个断点在程序完全启动前(前面设置的那个断点)是出于禁止的状态)

image-20211023232531397

这样,以调试模式启动程序的时候,时间花费不会太长,并且,我们可以完整的追踪foodCartViewRepository的访问情况。完美!!

小结

简单的情况下,使用行断点

非调试情况下查看程序的运行情况,使用logger

查看对字段的访问和修改,使用字段断点

比较复杂的情况,综合使用断点。

posted @ 2021-10-23 23:48  Blithe-Chiang  阅读(224)  评论(0编辑  收藏  举报