写在前面
距离上次更新已经有一段时间了,之所以这么久没更新,是因为我非常喜欢的一部番剧——进击の巨人,漫画篇完结。心情一直比较沮丧,所以也没有心思更新。虽然这部漫画以一种很不友好的方式结局,但是这并不能妨碍它被封为神作。尽管早在几年前,进击的巨人就已经被官方列为禁播,原因是剧情中有很多情节过于血腥,但是究其核心,还是因为漫画的作者——谏山创是日本右翼,并且剧情的走向经过很多人的剖析,也确实暗含了一些右翼的论调。不过作为一个单纯喜欢二次元向的我来说,并不想去过多的解读,毕竟这是一部我追了十多年的剧,虽然是月更,但它陪伴着我从学生时代到而立之年,陪伴了我很多个无聊的夜晚,同时也给我带来了很多欢乐。从剧情上来说,进击の巨人世界观宏大,故事情节紧凑,尤其是被霸权社改为动画制作后,更是吸引了一大批粉丝,无论从BGM、故事逻辑的严谨性,还是打击感、分镜,包括文戏、人物的塑造等等,都称得上巅峰之作。以至于第一次看到这部动画的时候,经常看的目瞪口呆,原来动画还可以这样演。现在它完结了,无论最后的结局是不是被大众所喜欢,对于我来说,其实都可以接受,虽然心里有些难过,总感觉空落落的,为什么会是这种意难平的结尾?但是还是要谢谢谏山创,抛开所有的不谈,至少他创作的一部叫做进击的巨人的漫画,陪伴了我的成长,给我带来了很多的欢乐,这就足够了。最后还要大喊一声,巨人yyds~~~
断点分类
在IDEA中,断点大致可以分为5类
行断点
源断点
方法断点
字段断点
异常断点
...
我们一个一个来说
行断点
行断点是我们开发中用的最多的一种断点。它应用于方法体内部的某一行代码。只需要在需要断点的那行代码左边点击鼠标左键,就会看到一个红色的小圆点,这时我们以debug模式启动,如果该方法被调用,那么当执行到断点的那行代码时就会停住供我们进行调试和修改工作。如下图:

调用栈可以方便的查看在断点之前有哪些方法被调用,这个在查看一些框架的源码,尤其是调用层次很深的情况时显得格外有用。如下图:


变量列表方便我们查看在进入断点之前各个变量的值。如下图:

下面截图中红框部分是各种调试执行按钮,我们从左到右一个一个来说

Show Execution Point:立刻将光标停留到当前断点执行的代码。这个功能可以帮助我们快速的定位到断点执行的所在位置。 Step Over:单步调试,代码在断点位置向下执行一行
Step Into:进入方法。如果当前断点位置存在调用其他方法,点击此按钮就可以进入到被调用的方法内部(仅限于当前工程中的方法)。
Force Step Into:进入方法。功能和Step Into一样,但Force Step Into可以进入任意方法。例如toString()方法,Step Into会直接跳过,使用Force Step Into才会进入方法内部
Step Out:与Step Into功能互补,可以使断点跳出进入的方法并回到方法调用者在调用进入的方法之后的一行代码
Drop frame:这个功能比较有意思,丢弃当前栈帧。会直接返回到方法调用者调用方法的那行代码,如果继续执行,断点会再次进入被调用的方法。这个功能要和force return区分开,想象一下,如果打了一个行断点,当代码运行到断点位置时,我们经过调试发现这行代码需要修改,这时肯定要将应用停下来,后面的代码就不需要执行了。要做到这点,通常情况下我们会直接点停止按钮,但是这里即便我们点了停止按钮,在当前方法内部,断点后面的代码也依然会执行。在网上很多的文章中都提到Drop Frame就是帮助我们避免这种问题的,它会将当前栈帧从断点处直接销毁,后面的代码就不会执行了。
这个是错误的~~
该功能其实在Frame中。看一下下面的例子


上面的代码中,如果直接点击左侧橙色框中的按钮,虽然应用停止,但是可以看到控制台依然打印了这两句话。也就是说,应用时在line()方法完全执行完毕后应用才结束。而如果使用Frame面板中的Force Return(选中方法点击右键),就只会打印第一句话,第二句打印就不会执行了。
Return to Cursor:断点会调到当前光标所在的位置。这个也很实用,例如当代码执行到我们设置的行断点时,如果我们还想让程序停在后面的某一行代码,通常做法会再打一个行断点,然后让程序直接运行。有了这个功能,就可以省去我们再打一个断点的步骤,直接将光标停留在我们想要断点的位置,然后继续执行就可以了。
源断点


那源断点有什么作用呢?试想一下,如果我们在打了过多的行断点后,为了不影响程序运行,需要暂时取消掉一些行断点,但是又不想彻底取消,因为后面还有可能再次开启。这种情况下就可以将行断点改为源断点,只需要在刚才的面板中将Suspend取消选中即可。当想再次启用时,根据打印的断点信息找到源断点,再次将Suspend选中并选择All,完成后源断点就又变回行断点了。
方法断点



异常断点
异常断点主要使用在当程序出现异常时,IDEA可以帮助我们通过断点的方式快速跳转到出现异常的那一行代码,并且可以根据异常的类型进行全局设置。设置方法如下图:
IDEA左下角有两个和断点相关的按钮
第一个为断点详情设置
第二个为忽略所有断点。如果你想一键设置所有断点都失效,可以使用此按钮,这个会在后面的文章中详细说,今天暂且不表。







字段断点
字段断点可以帮助我们定位字段的赋值过程,提高调试效率。尤其是在浏览一些框架的源代码时,当我们想了解一下一个对象的属性是在何时赋值时,由于庞大的代码量和复杂的文件结构,导致一时无法了解方法调用链,此时就可以使用字段断点,在字段被赋值时可以通过断点查看前后的调用栈,帮助我们快速的理清思路。

User类中有username属性,并且提供了访问器方法,在username中加入了字段断点。













