00:00
那版本控制出来以后呢,下边我们说第11个点叫断点调试,那调试的话呢,也是成员一个基本的技能了,嗯,之前的话呢,如果你使用过eclipse的话呢,那eclipse当中的调试应该也都基本掌握,那在idea当中呢,其实区别不大啊,我们就简单来给大家演示一下就可以了。嗯,首先的话呢,这里边儿提到一个设置哈,这个设置呢,其实也是对idea的一个优化的设置,大家打开我们这个idea,在这个setting里边。我们这个。呃,调试哈,叫第八个,呃第八个这块呢,呃,有一个transport,默认的话呢,是socket模式,大家呢,可以给它勾选成叫share的memory啊,尤其对于Windows系统来讲啊,可以改成后者,这样的话呢,一定程度上可以节省我们的内存空间啊行。这呢是一个优化层面的一个设置啊,就不多说了,然后接下来的话呢,我们就通过呃一个小的例子呢,给大家来演示一下这个断点调试的几个基本的操作,这个操作的话呢,在eclipse当中呢,大家应该是都比较熟悉了啊,这里边涉及到几个基本的操作哈,像step over into啊,这false step into,然后step out啊,Resume stop啊,然后查看我们这个啊,这是禁用啊,禁用我们这个断点,然后呢,查看这个所有的断。
01:17
啊,如果呢,之前大家没有使过使用过这个断点的话呢,呃,我们简单举一个小例子哈,小时候呢,大家不知道都有没有玩过超级玛丽,呃,超级玛丽举个例子,比如说这就是一个平坦的这个路了啊,然后上边的话呢,超级玛丽有几个井盖嘛,这个应该都玩过是吧?这呢,假设就是这个井盖哈。它都是凸起来的。嗯,好,这儿呢,我就假设这个井盖放的稍微多一些了,那这呢是这个马力,呃,它现在呢就过来,呃,那这儿呢,每一块呢,或者我们这个向右的这个过程呢,就是代码的一个执行的过程啊,每一个块的话呢,就好比是一行代码,那如果呢,我们叫step over呢,这个over呢就表示的是略过的意思啊,不进入方法体,比如说这一行代码呢,它有一个啊,不管你是一个这个方法也好,还是呃一个这个比如说构造器也好哈,呃我们呢,如果你要是调用那叫over的话呢,它直接呢就跳到这儿,你可以理解为它不会进去。
02:17
啊,他直接呢就站到这个井盖上了,嗯,然后呢,你要是再点一下这个step over的话呢,它就从这行代码呢,就直接呢跳到这一行代码了啊,它不会进到这个井盖里边啊,这呢叫over的意思啊,再再over呢,又是跳到这个了,是这样的,然后step into或者叫force step into,它俩的意思是一样的啊,都叫进入方法体,那就意思呢,如果你在这个位置,或者说或者以这个位置为例吧,你在这个位置,如果呢,你这时候换一个颜色哈,这时候呢,你要操作的点击的是叫step into的话呢,它指的呢,就是这个时候它会进到这个井盖里边啊这下边呢,这不是还清楚的记得啊,超级玛丽过第二关的时候呢,是这个水下啊,就从这个井盖就进去了啊,这个into它指的就是进入的意思啊,就进到这个井盖下边,可能下边还有很多金币啊,还有相关的一些关啊,需要你这块去过啊,这块你就在下边走,然后呢,Step out呢就叫要出来啊,这个从这个位置进去。
03:18
对,出来的话呢,我们就从这块就出来了啊,你得能进去也得能出来啊,这就step out的意思,那有的时候我们这是一个方法或者是一个构造器,我们into的时候呢,就可以来查看构造器的内部或者方法内部代码的一个,呃,这个执行情况啊,Out的话呢,就跳出这个方法体了,你开始后续的这个执行,然后这个叫resume program。啊,这个呢,意思就是比如说我们在这个位置设置过断点,在这个位置设置过断点啊,然后呢,你现在代码执行,比如说执行到这儿吧,在这的时候呢,我们resume一下,直接呢就跳到这个断点这儿了,再resume一下呢,就是呃,程序呢,它也执行这个代码啊,只是呢,它不在这停留,直接呢就下一个运行节点就在这儿了啊这是以一个一个的断点啊为一个阶段啊去执行的,这不写着啊停留到下一个断点处,Stop呢,就整个结束我们的断点调试啊,那这块呢叫mute,呃,Break points,就是使得我们的所有断点的失效了啊,然后下边呢,就显示所有断点没了。
04:21
这是如果呢,你要对这个断点不了解的话呢,呃,稍微墨迹了一下啊,给大家说一下这个断点调试里边的几个操作啊,对应的也都有快捷键,这些快捷键的话呢,也都给大家设置成跟eclips是一样的了哈,那下边呢,我们通过例子呢,简单给大家演示一下,比如说呢,我们在这个功能下面啊,去新建一个class。嗯,我们这块呢,来测试一下哈,关于这个debug啊,它的一个测试哈。行啊,因为呢,咱们把这个当前的PRODUCT01呢,跟咱们的GI呢关联起来了,他现在问我是不是需要做一个。同步是吧?啊,是不是需要给我们同步过去,呃,你可以选择一个yes或者写个no啊,No的话呢,就是我们现在先在本地进行一个编辑行,然后呢,先来一个main方法进来以后呢,我们写一个例子吧,嗯,比如说我们先去拗一个哈希map。
05:18
哎,这呢,我们是一个string类型的key string类型的一个value,好在这个位置enter生成一个变量啊,我们就称作一个map,然后呢,我们往map里边去添加一些建池,对啊,比如说内。哎,我们叫Tom。Put,接着拿age。啊A呢,我们设置成一个12啊,再来两个的,下这个呢,我们来一个。学校学校呢,我们给他来一个好学校吧,清华啊清华应该是这样写的啊,清华然后呢,这个专业啊,清华里边清华是工科比较好啊,全国工科第一,嗯,像这个计算机啊,这是清华非趁的一个专业了啊,全国排第一啊,跟这个中科院的并列,嗯,并列的话呢,应该还是清华要稍微强一点。
06:14
行这呢,我是放了几个键,对啊,接下来的话呢,我们可以再接着啊put啊map点,嗯,我可以给它get一下啊,指定key对应的value,比如说age。嗯,然后al enter,哎,我们给它获取一下edge edge呢我们也可以打印一下啊,一方面呢,大家可以edge.s out,这个记得咱们讲过模板是吧,那这是一种方式啊,CTRLD还可以呢,这个s outt啊s outt咱们这是个变量了,那就是V,诶这样也可以。行,这是呢,获取还可以呢,做一个remove,哎,我们移除,比如说我移除一下它的major,诶这呢就是一个移除操作,行移除完以后呢,我们这时候呢,对这个map呢,比如我进行一个输出啊,就是这样的几个步骤啊,行,那这个写完以后呢,我们以它为例呢,进行一个演示,比如说第一行这个创建对象的过程,然后put的第二个过程,Get的过程,Remove的过程,我们都加上了断点,这里呢,一共有四个断点,加上以后呢,你可以点右键,有一个叫debug,还可以呢,点这个小臭虫一样是吧?哎,进行一个debug点击。
07:33
啊,是否是要重新执行,然后yes,好,现在的话呢,我们就进入了啊,进来了,进来以后的话呢,刚才我们说的几个操作呢,都在这儿,这个呢叫step,嗯,Over是吧,Step over这个是into的意呃,Into的意思,这个呢是out的意思啊我们现在呢想进入啊,比如说先演示这个吧,这个我们不进入,不进入的话呢,就是一行一行往下走啊,大家看到就一行往下走,走的过程当中呢,我们相应的这个变量啊,Map,它内部的这个元素的个数啊,这个其实也都能够显示出来啊,就便于我们去做一个调试。
08:09
啊就是这样的,就是往下,然后呢,这有一个呢叫resume,诶我们这个点击的时候呢,它也执行这个操作哈,但是呢,它会停留在我们下一个断点处啊点击啊就这样,那下边再没有断点了,那再点击呢就会结束。哎,就会出现这样的情况。啊,然后呢,整个咱们过程当中的这个断点的个数,在咱们当前这个程序当中,我这一共有四个断点,对吧,还有四个断点啊好,然后呢,我这时候再让他跑起来。嗯,跑起来以后的话呢,嗯,首先呢,我们来一个进入啊,进入一下我们的哈希map。啊,这呢是一个加载的过程啊,加载过程大家再啊al一下,然后再进入啊,再al一下啊再进入,这个时候呢,我们就进入了咱们的哈希map这个构造器当中,那构造器呢,这里边只有一行代码哈,你点击它也行,这是它的一个执行。
09:03
啊,这是它的一个执行啊,默认的加载因子啊,这是0.75。啊,此时的size呢是零啊,Size是零,然后呢,我们可以out一下,Out完以后呢,我们接着往下走,哎,做一个put操作,那put操作都做什么了呢?我们可以再去进入。啊,这就是我们这个put操作做的事情,那put里边呢,它又掉了另外一个叫put value啊VL的一个方法,那这时候你还可以再去进入查看一下我们这个,呃呃,这个这个我们再出来一下,这里边儿你看有一个哈希这个方法哈,那我们所以进来的时候呢,看到的是那个哈希的这个方法啊。呃,因为刚才咱们已经看到这个方法了,所以我再进入就过掉了哈,然后再接着呢,就是我们这里演示的这个put v l这个方法啊,进入了,进入以后的话呢,呃,如果大家点击这个啊,这个step over的话呢,就一行一行的往下执行啊,这个呢,就是真正我们的代码的一个执行过程,这又有一个recess。
10:04
如果呢,你想看都做了哪些事情,那你就再去into,如果不想看呢,你就over啊,就执行下一行。啊,比如说我们想看啊,那你就点一下into,这样的话就进入我们的recess了啊,你看到这以后呢,就不想看了,那你再做一个啊,这个out就出来了啊,接着再往下走。哎,再往下走,哎,这有一个你no的一个方法,你又想看了再进去啊,这就看,哎然后呢,看完了以后,哎再出来,哎再往下依次执行。哎,这呢,就是咱们这样的一个过程啊行,那在这个过程当中,我们可以再alt再出来,再alt再出来就回到这儿了。啊,就回到这儿了啊嗯,下边这块呢,有一个看哪个操作这个呢,就停止了哈,这个短线演示这个呢,就是如果我们点它的话呢,我们所有的断点呢,就变成灰色了,这时候就不起作用了。啊,这就不起作用了,再一执行我们就整个结束了,就啊这是它,然后的话呢,我们要点击这个,呃,停止的话呢,那整个这个程序呢,相当于也就诶这个调试的这个程序呢,也就终止了。
11:09
行这呢,就咱们说的这个调试的这个事情哈,不难不难,这个调试的时候呢,这个快捷键啊,大家不知道刚才有没有注意到哈,这个快捷键的话呢,这块也设置成跟咱们的eclipse是一样的了。啊,是一样的一样的了啊,大家呢,你可以去相应的使用,其实就是咱们键盘上F5F6F7啊这样几个常用的操作。啊,跟咱们的eclipse是一样的,行,这是这个事情,然后的话呢,在这儿再提到一个叫做条件断点啊,条件断点在调试的时候呢,我们常常在循环里边可以增加一个条件判断啊,可以极大的提高效率啊,心情也能很愉悦,举个例子,比如说呢,我这把这个就先都停了啊,在我们最上边的时候,我写一个for循环,比如for I,嗯,从零开始到100。
12:02
好,然后呢I点啊s out一下,嗯,然后呢,我在这个位置加个断点,这个断点呢,点上以后,我在断点上点右键啊这呢就是一个条件,条件的话呢,我让这个I呢,哎等等于60,这个条件呢,一定是一个布尔类型的啊,然后荡一下。这呢就是一个条件断点了,那此时的话呢,我们这个再重新进行一个debug。啊,Yes一下啊,因为咱们这块这个跟gate关联上了啊呃,然后呢,这个时候大家看到我一旦执行这个debug的时候呢,这个程序就停到这儿了,这个停的位置呢,此时的I就是60。也就是说呢,这个条件断点呢,我们这个循环哈,我在这点了个断点,如果没有条件断点,它会从零啊开始一个两个三个四个这样往上走,我加了个条件断点,它会一下子就执行到我们断点满足这个条件满足的这个位置上了。啊,相当于可以增增加咱们或者叫增快咱们这个调试的一个时间。
13:04
啊,是这个情况。好,然后呢,我们再点一下它啊,就跑到我们的这个断点位置了啊,然后呢,再比如我们再下一步啊下一步好在这是一个map了,嗯,这时候呢,还有一个快捷键啊,还有一个操作啊,就是查看表达式的值叫ctrl u啊在当前这个位置的时候呢,我们点一下ctrl u,比如说我们现在想查一下这个就就是map了啊这个变量哎,回车。哎,查询一下,那此时呢,就能列出来当前这个map它的一个值的情况,Size呢是一呃,它里边有一个值,Key是name value是Tom啊,因为这行还没有执行啊,还没有执行啊,这呢就是我们查看已有变量这个值的一个操作啊,叫ctrl u行,这呢就是咱们关于这个呃,Debug的一个使用的简单说明啊简单说明那后续的话呢,大家在呃使用过程当中呢,可以进行一个练习啊,那断点呢,是刚才已经说过了,是程序这个调试程序的一个必备的一个功能啊,一个技能啊,大家需要掌握。
我来说两句