调bug流程
例子只叫大家如何找到bug,不会将到太具体的bug的解决。因为bug太多,解决方法也很多。最重要的是找到bug。
下面以一个真实的案例来带领大家来体验。
一、运行代码,发现错误。
(在这一步,理解要报错的提示,一般编译器都或多或少有点的,如果看不懂可以赋值粘贴到CSDN上看看是否有人也有同样的报错)
在这个报错中,我提取到了切入点,(如上图是画红线的部分)。
二、找到报错的位置。
首先看一下是否有明显语法错误,如果看不出。试一试把这个部分注释掉看是否还会报错(关键)。
发现没有明显的错误 , 于是我试着把它注释掉,注意在注释的时候不要自己弄出错误。(即把与这个代码相关的根着注释掉,所以这里也体现了尽量将重复使用的代码整合会一个函数)。
与其想关联的
三、如果注释后运行正常了,那么就是注释掉的部分有误了(这是最想看到的结果了);
如果没有 , (如下图,还是相同的错误,我就感觉邪门了。。。) 于是将这个错误赋值粘贴 ,搜索看看
搜索结果如下,如果找到相同的那就最好了,没有的话。。。。(本博主就是没有,脸干)
不过在这些类似的结果中好像都提到了new 。刚开始我以为了模板类写错了(毕竟模板类难倒大半好汉呀)。于是将整个头文件和对应的cpp 给注释了(后来发现这个思路不对 , 不要学博主呀)
在注释的时候人已经烦了,最好还是睡了一会儿头脑清醒了。 (⊙o⊙)… 聊正题。
四、于是就认为应该不是这里的锅,那么我们将中main 函数里边调用的开始下手。
首先全注释掉 ,看还有没有,还有就是编译器的问题了。然后一个一个的解放出找到有问题的函数出来。
如上图,在这样操作之后,发现是 如下图
五、一般编译器都会有,查看定义,跳转到定义的功能,这很大程度上能让我们快速的找到bug。
(如下图)
六、同方法五类似,找到在这函数中调用函数的问题,或者是该函数本身的问题
(在这里我是不是又提到了调用的函数,因此将功能模块化很利于我们调bug)
七、最后的问题,集中到一个 if 语句中了
继续
是里边 两条语句的问题 , 然后分析,肯定不会是单独下面一个语句的错,因为如果没有 申请空间就赋值肯定错的。而第一个语句又有new ,再联想到前边搜索的结果。我就想是不是new 的问题呢。
首先试了一下变成 malloc 。结果嘛,看一下这篇博客就知道不能这样,还得用new 。为何不能用malloc
之后呢?我想了想,既然申请一个空间没错,那么就是申请完空间后,第二条语句赋值的时候错了。赋值(这语句是不是很简单。。。),赋值的这个操作过程是没问题的,那么 , 真相只有一个 ,那就是 拿来赋值的 temp 有错。(最后发现,还真是)
八、因为是文件流,我就试试是不是读取到了东西 , 或者是文件没有成功打开,
好家伙不试不知道一试吓一跳呀。竟然是文件打不开的错()服了。这也告诉了一个道理一定要接加一个检查文件是否已经打开的命令。