当前位置:C++技术网 > 资讯 > 最简单也是最好的“排除法”找Bug,效率很高

最简单也是最好的“排除法”找Bug,效率很高

更新时间:2015-07-12 01:42:25浏览次数:1+次

    调试程序已经到夜深了,可是问题老是出现,不管他吧,睡不好,管他吧,又找不到,很是心烦。几乎差点要回滚到原始状态时,突然灵光一现,测试了另外一个地方,发现也存在问题,似乎明白哪有问题,找到了,解决了。

    找Bug,程序找Bug
    这个地方原来是好的,我以为是我后来写代码引入了错误。正是这样,代码写着写着把以前的代码都搞坏了,这种情况太常见了,所以,备份一下,在新的一份项目中开发,及时毁了之前的代码,那也不会太惨,这样可以放弃当前被破坏的项目,重新复制原先备份的那个项目。这个原理就是版本控制系统的原理。
    当我写代码写到把之前的代码都毁的时候,我确实没招了,就想用之前的版本重来。不过,重来也是有代价的,这样表示这次写的代码就会拜白写了。不甘心呀。但是很遗憾准备回滚了。就在那一瞬间,似乎找到一个突破口,算是灵光一现吧。然后赶紧去找,结果真找到了问题,修复了原先的代码,这样之前的东西就修复了。新加入的代码还是有问题,怎么找也找不到。
    我打算一行一行的看代码,还是正确的。这样就很奇怪,怎么会这样呢?打断点跟踪也没有跟出什么,很是无奈。不过,这次在解决了毁坏原先的代码的基础上,我准备继续找一下。然后,出动了终极武器--“排除法”。简单粗暴,药到病除。排除法去除Bug,简单粗暴
    然后就将代码块全部注释,然后一个一个的去掉注释,测试,看看哪里会出问题。就这样,一步步的一层层的,一分钟找到问题根源。哎,怎么前面就没有用这个呢?浪费了这么多时间,摧残了多少脑细胞呀。
    那么问题是什么呢?其实问题很简单,但也特别容易忽略。这个也算是我的编程习惯不够好吧。以后要特别注意。写出来也是让大家一起来积累一点经验吧。
    问题就是,通过一个函数返回一个字符串。当然,如果函数获取字符串失败,那么函数返回空字符串。而我在函数返回时,并没有检查函数返回值,直接将函数的返回值拿来用,结果测试时,就返回了空字符串。这样一来,黄金爆头呀,亲,有没有!实际上,我是用返回的字符串当做MSSQL的SQL语句的查询条件,所以总提示错误是“=”附近出错,然而开始总是忽略了这里的风景呀,直到最后查出问题,才恍然大悟。
    所以,最后总结一下,调试找Bug时,如果无法确定Bug出在哪里,可以尽可能先缩小范围,然后使用排除法来测试结果,一般很多问题都能够通过这个简单的方法找出问题所在。分析这个过程,就是想让大家注意咯。
    还有一点,写程序时需要特别注意,对于一个返回值,尽量做检测,除非这个值一定不会出错,否则,只要有可能出错,一定要对结果进行检测,不要觉得这个是不必要的。要知道,就这样的问题,出了之后才是最难找的。因为一开始你就完全排除在检查的范围之外了,请问你如何找到呢?而在商业程序里,对这些错误检测,最为严格,不容失误。比如银行、支付宝余额宝、财付通等银行相关的,12306买票,铁路航空交通系统、工业控制系统等,你一个疏忽,你就摊上大事了。
    其实一个程序员找Bug解决Bug以及编程习惯,才是真正反映编程水平的东西。