您还未登录! 登录 | 注册 | 帮助  

您的位置: 首页 > 软件开发专栏 > 其他 > 正文

没有解不了的bug,只有追不到的女神

发表于:2021-04-30 作者:良许 来源:良许Linux

大家好,我是良许。

我们程序员的成长史就是与bug的斗争史,每天重复着写bug、解bug。俗话说:没有解不了的bug,只有追不到的女神。

不仅菜鸟不断埋雷,老司机也在创造bug,只是频率略低。

当然了,即使你是老司机,代码写的溜溜的,在团队作战时也难免被团队成员拉下水,在特殊时期被迫上阵测试bug。正所谓,不怕神一样的对手,就怕猪一样的队友。

既然bug是不可避免的,大神的升级之路也少不了它的丰功伟绩,那当程序出现bug后,要如何进行调试。且看我十招降龙十八掌解Bug法,比追女神的方法更管用。图片

首先,调整心态

人人都会出bug,bug是无法避免的,所以千万不要觉得,我出现了bug,就说明我比较菜(虽然自己确实比较菜)。

雷军,马化腾,李彦宏,张小龙,他们都写过无数的bug,出险bug是一件很正常的事。千万不要有太重的心理负担,平常心对待即可。

其次,想办法复现bug

如果自己复现不了的话,可以找测试人员帮忙。如果bug能够稳定地复现,那么几乎可以断定,这个bug是肯定可以解决的。

最让人头疼的是偶然出现没办法复现的bug,如何解决这种神奇的bug我们等下再说。

第三,仔细分析现象

对照需求文档,看看程序正确的运行应该是怎样的状况,再对比bug出现的现象,我们一般可以大致定位出来是哪个部分出现了问题,再对那个部分进行深入分析。

第四,查看日志文件

日志文件是非常重要的一个文件,记录了程序进行过程中输出的各种结果,同时也记录各种各样的报错信息。所以你分析报错信息,再结合报错点上面及下面一些正常的log,一般也可以定位到对应的代码位置,甚至直接就可以解决bug了。

这就要求我们平时在写代码时,一定要多留个心眼,把可能出错的地方多写一些log,特别是if...else,try...exception,这类程序异常运行的地方多加一些log。

虽然写这些log的时候可能会多花点时间,但在代码出现bug的时候可以给你省下很多调试的时间的。

第五,网络上查找解决方法

其实很多bug也有其他程序员碰到过,所以如果你实在分析不出原因的话,直接网上搜索解决方案。推荐google,stackoverflow,bing,最后再用百度。

搜索时,建议尽量用英文,这样搜出来的结果会更多,并且不少会是非常详细的解答,非常有助于bug的解决。

第六,注释法

如果你实在没有思路,那可以采用注释法来排查。所谓的注释法,就是你把你写的类、函数、模块,等等你认为有可能出现这个bug的部分,一个个依次注释掉。

每注释一部分,编译运行,看看bug有没复现,有复现的话继续再注释其它部分,直到bug不再出现。这样就可以确定bug出现在刚刚注释的代码里,再慢慢把注释的代码打开,就慢慢缩小了范围,然后就能排查出问题了。

这个方法是当年我的一个主管教我的,我觉得非常实用,现在分享给大家。

第七,断点调试

这应该是很常见的一种调试方法了。你可以在代码可能出错的地点打上断点,然后再运行代码,看看程序会在哪一行出错。这种方法简单实用,效率也非常高。

第八,增加日志

对于一些不方便进行断点调试的场合,比如说我所从事的Linux应用开发的场合,一般我们写完程序编译后就直接丢到Linux平台上运行,如果要调试的话需要用到gdb,但很不方便。

所以对于我个人来讲的话,我几乎没用过断点调试,我用的方法就是在代码里可能出错的地方,人为地再增加几个log,或者把一些对应的变量的值用log打出来。然后通过已有的log及新增的这些log,就可以排查出来问题点了。

这种方法虽然说不是很高效,但用这种方法一般要先分析代码,再打相应的log,可以锻炼在大脑里直接运行代码的能力,久而久之也会提升代码水平,后面调试的速度也会越来越快。据说,大神都是偏爱这种调试方法。

第九,code review

如果你上面的方法都没办法解决bug,或者你的bug根本就没办法复现,那么你就可以组织一场code review,让组内的成员一起来找茬。一个人的力量有限,但一群人加起来就会有无穷的力量了。通过一群人来群殴你的代码,很可能就会找到这个bug的根因了。

第十,请教老程序员

俗话说,不懂就要问。所以,你如果实在解决不了bug的话,可以去请教组里的老程序员。老程序员一般经验比较丰富,他们有可能根本不需要调试,一眼就看出你的问题点。所以,平时有事没事一定要跟老程序员搞好关系,到时候请他们帮忙的时候就好开口了。

但是,千万不要太依赖老程序员,即使他们帮你解决了问题,你也一定要自己去想一下,他们是怎么解决你的问题的,使用了什么方法什么技巧?只有这样做,你的技术才会得到提升。

最后,再推荐一个国外很流行但国内很小众的方法,小黄鸭调试法

所谓的小黄鸭调试法,并不代表小黄鸭会帮你解bug,而是你在调试代码的时候,手拿一只小黄鸭,然后详细跟小黄鸭讲解你写代码的思路,以及每一行代码的意义。

这样讲着讲着,突然就会灵光一现,找到问题点了。这种方法看起来有点傻,有谁会对一个玩偶哔哩叭啦讲代码,所以我估计这也是小黄鸭调试法在国内流行不起来的原因。

如果你觉得这样很傻的话,可以拉一个同事过来,向他讲解代码。或者你也可以自言自语,讲着讲着,你就可能找到解决方法了。

好了,以上就是我给大家推荐的几种bug解决方法。这些方法都是非常实用的,如果一种方法行不通的话,可以用其它方法来解决,甚至使用多种方法一起来解决问题。