00:00
各位同学,我们再来看断点调试的第二个案例呢,我们来看一下数组越界的情况,好吧,就是我们想来看数组越界的情况会怎样发发生,它会怎样出现一个提示错误,好,这个代码呢,我已经给他准备好了,我们来直接用一用就好。好,同样我把这个代码的这个取消,取消这个断点怎么办呢?点这删除断点,点这删除断点就可以了,好,我先把这段代码注销一下好不好。然后呢,这边我们来新建一个debug的第二个案例。第八个DEMO02好,跟着老师思路,那这个时候呢,我们把这个CPP的后缀也改一下。对,然后呢,我include std。STDIO。好,VO的主函数。然后呢,在这里我们写一下,我们来看看他这个断点的,就是这个越界是怎样发生,大家看我对代码呢,故意这样写的,我求出了数组的长度,然后呢,我在。
01:07
去遍历我们数组的时候呢,我故意这写了个等号,按理说这个等号不应该写,对不对?为什么不应该写呢?因为你这有五个元素,那大小确实是五,但是你最大的下标其实只有四,但是你却访问了五,我们看看会发生什么情况,用d bug的形式来追一下来走起来。好的,往下走哈。往下走。好,这时呢,它仍然会给我们出现一个debug的界面,这边是变量的情况,那是R,这现在都没有初始化走下一步。咱们直接逐逐过程。来了I你看这个时候数组已经初始化,看数组是12345,是不是12345啊有吧,因为你已经执行了这这这条语句吗?I现在没有初始化,所以它是一个未知的值,那紧接着继续往下走。过程I现在也被初始化了,我把这个收一下,那紧接着呢,我们再来往下走一个好认识变成五了,好,紧接着再来玩,看我们情况会怎么样哈,来逐过程。
02:12
走,逐过程,再来逐过程走F10。F10。F10。F10。好,现在呢,我们这个I已经变成二了,还没有越界对不对,来再来变成三的时候,我们再来看这过程变成三。好,现在变成三了,再来看变成四,四也不会有问题。事业不会有问题。好,现在已经变成四了啊,那我们看这边已经输出了123。呃,123再来走,123,这次再输一个就应该输出了。是不是第四句话呀。是不是一个输12345,按理说现在已经不能再输出了,然后呢,我再继续来玩一把,走起来。哎,这过程,那大家看此时此刻这个I呢,它这个时候你看这个I线等于四,我再往下走一步,它其实是执行执行的I加加。
03:08
它会执行I加加,看到没有,现在是不是已经是I加加了,已经变成五了。那这个时候呢,你们你们可以看到此时此刻这个A,他就会去访问什么呢?访问我们的奥瑞五,那二瑞五其实这个数据呢,其实是一个未知的数据。未知的数据,它会打出什么呢?我们来看一下。走起来。好。大家看这时它会输出一个什么样的值呢?莫名其妙的一个字,也就是说他这个时候他会他会怎么样,他会找这他会怎么样呢。它其实是这样子的,就是这个数组里面呢,原先有五个空间。有五个空间,这五个空间其实就是我们的12345。那么这个时候你强行访问2V5呢,它其实是在后面去找一个这这个空间,这个空间其实是一个未知的值,对,所以他就会输出一个无法,就是你预预预料不到的一个值,如果这个地方是一个很危险的垃圾值,很有可能造成我们程序的异常中断。
04:16
明白这个意思了吧,好,我就说到这里,好,这是我们这个数组越界的时候会出现一个什么情况,好,我终止一下这个调试,好吧。终止要调,也就是说你越界的过后呢,你会发现它在访问的时候会访问一个不可预知的值,而这个不可预知的值有可能导致我们程序的异常退出,当然也有可能输出来,就像刚才那样,但是这个预值,这个值是完全你无法无法把控的,好这个呢,就是给老师给他讲的数组越界的一个测试,紧接着我们再来看一个案例,那么这个案例呢,我们想演示一下如何进入。进如何这个调用到,或者叫叫进入啊,进入到调用的,对这个没有写错,如何进入到我们调用的函数体内。
05:02
那么有时候呢,我们想去看一看这个函数里面到底是怎么执行的,我们有时候需要看看。怎么进入到函数体内?好,这样子呢?我先给大家举举个例子。好,同学们,我们先来写第八个的一个案例,第三个案例。De bug demo3。好吧,跟上老师思路哈。然后呢,这边我们。先把这一个文件啊,代码拿过来,Include std IO没问题吧,同学们,然后呢,VO。贸易的走起来。那么的里面呢,我写我把这个代码拿过来用一用好不好,就因为这些代码都本身就很简单的,这段代码呢,是呃,有一个头文件,我先写个头文件,我把这个double这个头文件先写上。这个头文件我就用以前咱们写过的麦放好吧,这边我写了一个。这个叫呃,开了二,接收两个int,然后再接收一个操作符,返回一个结果,那么那么这边呢,这个开二的一个实现方法呢,我也写在我们的my function c里面。
06:14
MYSHE应该是在哪写的,我就忘了,有点my function。啊,在这儿。好在这在这里面呢,我在这里面我们写一个。这个好。这是我们一个方法的实现,看清楚了,这是这是开了二的开了二的实现。方法的方法的一个具体实现。好,那这个方法其实很简单,就是说你我接收了两个呃,Int值,然后呢,根据你的这个操作符,我返回一个结果,但这边呢,这个输出没有,我应该再引入一点东西,Include什么呀,STDIO,好吧。好,这个我相信大家应该能看懂什么意思。
07:00
好的,那这个写完了以后呢,回到这边来,回到这边来,我们来调用一下。这个代码呢,我已经准备的差不多了,我把这个拿过来用一下好吧。待会儿我们看看怎么追到函数题里面去就可以了。那这边呢,我们首先要来引一点东西,Include。Include std。诶就是lib,因为这里面有一个system,还有还有调用一个开二,调用开二是不是按照我们以前讲的要引入这个头文件呢?呃,这个我们前是不是讲过了。好同学们,现在呢,我要开始玩了,我先下个断点,我待会想追到这个开二里面去看一下它到底是怎么执行的,注意听老师讲是怎么玩的,其实这方要输的就是那个,诶哪一个哪个键呢,其实要输的就是这一个键。就是主语句,这个主语句就会进入到里面去,FC这个是主语句。逐逐个的语句。
08:02
那么这个呢,它会进入到函数体内,进入到函数体。那么我们来看看是不是这样子的呢?是不是这样子的呢?来我们来运行一下,先把这边注销一下好吧。下面这个注销一下,我们开始来玩了,来走起来要调试,开始调试。那同学们注意观察怎么到进入到这个开二。好,你看他现在打出来这个东西了啊,打出来这个东西过后呢,我们先跳过F1和N1和N2。N12逐,我们现在逐过程吧。再来一个足过程。好,现在再来注意听看这里了,现在N1和N2已经有值了,Op呢是一个乱,是一个乱,呃嗯,未未知的一个值,那现在呢,我们再来组过程一下。大家看,Oper也有了,Oper现在等于加,现在我要进入到。
09:01
开了二里面这个函数里面去,我怎么写呢?大家看这地方要用F11,也就是说主主语句调试,那这个时候注意看,我现在点的是主语句,而不是主过程,因为主语句才会进入到函数题的一点。大家有没有发现它跑到MY方程式来了,也就是说这个时候你们有没有发现它进入到my function c?看到没有,好,现在我就可以在这个语句里面再一句一句的执行,看到没有,诶看一句一句的执行。你看。现在因为你这个传过来是加,所以它会进入到这个语句里面去,看到没有。看。我再往里面来一个,你看现在是不是已经到这儿了呀。Result。追到值好,这个是我们演示的追进去,那有些同学说老师现在呢,我我追到这个开二里面就说我这边有个主主方法。
10:00
我追到了一个方法里面去,在这里面执行的时候呢,我因为这个这个函数可能这个函数可能代码很多,我想跳出来怎么办呢?我我执行到某个程度的时候,我不想再一步一步执行的,我想直接把这个函数全部执行完,直接回到原先的位置,怎么办呢?可以的,那你这个时候呢,要调这个快捷键,大家看这里是不是有个叫做shift f11啊。Shift的FC就是跳出某个函数,当然它跳出的时候呢,它也会把这一个函数执行完毕,就说跳出前注意听,跳出前会将该函数执行完。对,也就也就是我们提前退出来,那这个时候呢,我给大家演示啊,怎么跳出来点这里有个叫做shift的11要跳出,那跳槽跳到哪去了一点,你看它又回到这来了。是不是又回到我们原先这个主函数里面的这个res,这个时候再往下面执行一下re,结果其实就是能拿到来,再来一个主过程,可以看到RS呢,就已经等于了50点多少多少。
11:09
其实这个就它是这是double的一个原始值,但是我输出的时候呢,大家看现在还没输出来,我再输出一下。这个输输出呢,它会输出一个小数点两位的值,为什么呢?因为你这指定的是小数点两位。对吧,好同学们,那这个呢,就是我们讲的又一个应用案例,什么案例呢?演示如何进入到这个函数体内执行,这里面呢,我总结一下,最关键的地方就是一个F10F就是F11。这个是进入到函数题。对不对,还有一个什么键呢,就是shift。Shift加FC这个是干什么呢?这个是跳出。
12:01
跳出函数,跳出一个函数,就说我进入到一个函数的时候呢,这个函数代码很多,我又不想一句一句执行呢,我想快速的出来,你就按shift加FC,那如果说你这个快捷键忘了的话呢,你就在这在这来找,因为这边它其实是有相应提示的,也就是说这边呢,会有相应的提示诶。等一下啊。这边会有一个相应的提示。就是其实说白了就这几个键,一个是这个键。还有一个亭子。还有一个主过主语句,这个主语句会进入到函数。它会进入到函数。好,这个逐过程呢,呃,不会进入到函数,它是把函数也当成一条语句来执行的,还有一个跳出,对跳出好,其实主要就是这么几个几个吧,好,我把它复制过来,待会呢,我可能会有用哈。
13:00
放到这里来。待会儿我再用一下。好,放这儿。好,同学们,这就是我们。断点调试的第三个案例,大家看你理解了没有啊,也其实也不是很难。最后一个呢,大家说一下,最后一个案例呢,就是给大家我截一段视频吧。
我来说两句