那天同事问我你有什么突出的地方,我想了半天,觉得我最突出的地方就是改Bug比较快,所以今天我就对改Bug的技巧做下总结,欢迎补充。
途径
重启试试
作为人生四大真理(多喝点水,重启试试,喜欢就买,不行就分),重启有时候能解决很多莫名奇妙的bug,不过大多数没什么用,现在我开发的帮助中心充分能体现重启的威力,经常访问不到,但是重启下就好了。
断点调试和日志
断点调试对付逻辑上的bug非常有效,偶尔也能对付高级bug。咱们组基本上都会用断点调试,不像前两年我面试别人的时候,最常规的问题就是你平时怎么调试,几乎所有人都说system.out。啰嗦一句,不知道大家有没有发现,作为一个程序员,开发效率主要是被各种莫名其妙的Bug拖累下来,有时候你发现一个功能写了一天都没什么进展,总有那么一两个bug是你无论如何都过不去的。
面向谷歌编程
这个主要是用来对付你从来没有见过的bug,或者报错信息是你从来没见过的。谷歌大多数情况下能帮你找到正确的答案。与之类似的还有面向百度翻译编程,实在懒得看一大段出错信息,可以贴到翻译工具里面,虽然很少有提示信息超过一句话的。上次一个哥们给我打电话,说我们的服务器启动不了了,你帮我看下吧,我说行啊,你把日志发我吧,他就发了我一小段话,英文的,大致意思是密码过期了,非常简单。我让他改过密码就解决了。
找别人帮你看看
这个途径也非常重要。记得刚工作的时候,我有个编译错误无论如何都解决不了,我找我师傅过来,我师傅看来半天说,你的逗号是中文的。我说不能吧,他让我把那句话粘到记事本里,我一看,果然是中文的。顺便提一句,大家最好设置下自己IDE的字体,好的字体不仅赏心悦目,对于查bug也是非常有用的
心得
如果重启一次没用,那重启两次一样没用
对于发现不了问题的Bug,重启一次解决不了,那就不用再浪费时间重启了,再重启肯定也解决不了。这个道理我很早就想通了,但是总是心存侥幸一遍遍重启浪费时间。
如果你调试过了的地方没有问题,那很可能这一片代码真的没有问题
浪费时间的另一种途径,就是在这一块找不到问题,再来一遍,甚至两遍。最近印象比较深刻的就是上次有个同事遇到一个神奇的bug,他从头到尾都没用过缓存,结果他的查询结果总是被缓存起来,我帮他解决的时候,他才发现,原来是别人在同一个配置文件里,开启的全局缓存
快速浏览异常栈,只看与你的代码/配置有关的地方
很多人看见一片异常头都大了,我也头大过,自从我知道这个技巧之后,我的头就没那么大了。Java EE的异常栈非常有特点,最有用的地方不是在最上面就是在最下面,我看异常栈的时候,喜欢从下往上看,所谓从下往上看就是从最下面的一个Caused By:xxx,这里是最根本引发异常的地方,有经验的人一看就能看明白异常种类。从这里看出的异常非常考研一个人的开发经验,这里的异常一般都跟框架使用规则有关。从上往下看异常,最容易找到自己代码里的异常,比如空指针啊,数组越界啊,都是在异常栈的最上端,这是最能指出你代码出问题的地方。
多用用排除法
对于久攻不下的bug,请先遵循心得一和心得二,然后再看这里。尝试着改变代码里的某些参数,修改某些配置,能帮你快速定位问题。在使用排除法的时候,大家一定要时时刻刻牢记心得一和心得二。今年以来遇到的最顽固的bug是springMVC和spring结合的时候,对于更新操作一直不能拿到数据库的写链接。调试这个问题的时,我先用Junit测试通过了service方法,发现单元测试的时候一直没有问题,一启动web容器就会出现这个问题,然后我就一直在改spring的配置文件,各种尝试都无法奏效,当时我就忘记了既然spring没有问题,问题肯定出在springMVC的配置上了呗,这个问题调了一天半,最后我干别的事情的时候,突然顿悟了,后来去网上找了找,最后还真是springMVC的问题,由于springMVC在调用链的上端,它也可以管理事务,导致spring无法管理事务,所以没办法开启一个写事务。
知识和想象力非常重要
技术都是相通的,你懂的技术越多,你对技术的理解越深,你越能找到Bug背后隐藏的东西。反过来,知识很可能变成我们的障碍,使我们变得自负,顽固,限制想象力,要时常提醒自己,莫要止步不前
其他
要学会使用IDE。这点非常重要。全文搜索和文件搜索是非常有用的功能,直接搜索能比你从一堆文件里找到你想要的快很多,IDEA的搜索功能非常强大。
重构时,最好使用IDE提供的工具,IDEA的重构功能也非常强大
对于由于自己疏忽,漏写了什么东西导致的莫名其妙的BUG,看异常栈能大致定位到你的问题,所以还是谨慎点,这个基本上也没有什么防范的办法
Java EE是一种仪式感非常强的技术,换言之,某个地方该出现什么,虽然你不知道为什么要出现这个,但是最好像举行仪式一样让它出现,但是千万不要画蛇添足,这样就能保证你写的程序大差不差。
最好自己能明白自己写的是什么。这个看起来有点像废话,但是你调用其他人的东西的时候,最好读读API,如果没有的话,搜下。现在咱们用MAVEN,这个工具非常好的一点是能帮你把源码下下来,实在不明白的地方可以在人间的源码里打断点,跟着走。
欢迎加入 51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ 群: 755431660