断点调试–Debug如何进入源码
之前在学习这个C语言的时候,我们的这个调试可能并不怎么会使用,无论老师如何强调这个调试的重要性,但是我们可能刚开始都无法体会到这个调试的妙处;
现在,我学习这个java里面的常用类,很多的方法都是被底层封装好的被我们直接调用,如何更好对于这些方法进行调用和重写,如何理解这些方法的底层逻辑,这个时候调试就显得无比的重要,因此,我觉得这个调试的过程有必要学习一下;
对于下面的这个程序就是一个简单的for循环的过程,我们在这个过程会打印输出每一步的这个i和sum的具体的数值;
我们首先找到这个debug的按键:这个时候程序就会进入调试的状态,这个之前我们需要设置好断点(就是我们的一个参照点)我们的程序可以根据我们的断点进行特殊的控制,让我们的这个程序的调试更具有针对性;
下面的这个断点调试的按键1这个窗口表示的是线程和变量的种类,这个里面的这个6区域上面会显示这个所有的这个程序里面的变量的实时的变化情况,对于我们的这个for循环,主要就是这个循环变量和sum变量的大小的变化,随着我们的这个循环的进行,两个数据肯定是会发生变化的;
3表示的是终止这个调试的过程,4表示的是从当前的断点直接跳转到下一个断点的位置,2表示的是console控制台的意思,这个上面显示的信息就是我们的这个断点调试的过程中每一步都会执行的这个i,sum值的打印输出,这个也是debug的一个好处:把这个过程中所有涉及到的数值全部打印输出;
5就是我们用来控制这个调试的过程,按下这个之后程序就会象下一步继续执行;
下面的这个就是一个使用sort方法对于这个数组元素进行排序的过程。我们想要进入这个sort的源码,这个时候我们发现无论是step over还是step into都是进不去的,这个时候我们需要进行额外的配置;
配置方法如下:首先需要进入这个设置(一般我们的配置都是在这个settings上面进行的);
然后按照下面的这个步骤取消下面的两个选项的勾勾,就可以了,然后应用,我们再次调试的时候进就可以进入源码;
其实下面的这两个,我们上一个案例使用的是这个第一个step over按键,这个是因为我们上一个案例就是使用这个for循环打印数据,计算结果,没有涉及到什么偏向于底层的操作,但是这个里面我们使用了这个sort方法,因此我们有必要说一下这两个的区别;
第一个是step over表示涉及到细节的就会跳过,但是第二个step into就是涉及到方法的调用就会进入这个方法里面去(前提是需要进行上面的设置,因为这个IDEA默认是不会进入源码的)这个时候我们就会看到底层源码
这个调用的方法还是很厉害的,叫做:“双重枢轴快速排序”算法,没关系,我们现在只是在进行调试,这个源码的分析还需要一定的储备,但是我们需要直到怎么进入这个源码;
其实上面的这个step into是可以不断的进行深入的,这个过程很复杂,这个不是我们要关心的,现在我们介绍一下进去之后如何退出来,就是我们不断的往底层去,当达到某一位置的时候,我们想要跳出来,这个时候我们可以使用这个向上的调试按键:step out这样我们就可以一步一步的跳出来这个过程;
这个案例其实就是介绍多个断点之下的调试技巧,我们程序员在进行调试的过程中,如果设置多个断点,可以使用上面的方法进行断点之间的切换跳转;
当然,我们在这个调试的过程中,我们也是可以添加断点的,方便我们对于这个程序的执行逻辑进行查看;
这个就是我们查看这个对象的具体的创建过程,我们可以按照上面的这个方式,看看这个对象的创建过程,我们可以分别测试,在重写tostring方法和没有重写这个tostring方法的情况下,这个打印的底层执行逻辑,实际上是这个valueof方法里面的这个tostring但是这个对象是person,如果我们重写这个方法,这个时候调试就会跳转到我们的重写方法去进行这个属性的打印;
除此之外,我们还可以通过简单的案例查看这个动态绑定的过程等等,总之,调试的过程也是提升能力的过程,我们应该多去使用,因为后面的这个方法之类的比较多,我就是因为这个想要查看这个方法的时候不知道如何操作的,才意识到了这个调试的重要性,希望前车之鉴也可让大家提前觉醒~~