记一次bug追踪

工作中总会碰到一些比较纠结的问题,下面记录下一次工作中比较纠结的一次bug追踪。

问题描述:

用户在软件运行过程中卡死,几乎每次毕现,但是在开发的IDE环境下该问题总是不复现。

解决过程:

开始的时候是怀疑版本构造有问题,于是重新构造版本,但是该问题还是会出现,所以定位肯定代码有问题,但是因为不复现,所以很难查到到底是哪行代码的问题。这种情况到底怎么处理?


低头思索,既然安装版本有复现,那么只有在代码中加入调试信息,而且必须是安装版本可以展示给开发人员的信息。一种方法是在复现路径经过的代码处加提示信息,也就是子函数通过了,就给提示说,xxx函数通过,但是这样太麻烦了,因为要复现这个问题,可能这个提示要弹出上千次,我不能没复现一次点击一千次鼠标。还有一种方法就是将信息输出到文件中,反正我有代码可以随便改的。


于是采用第二种办法,逐个子函数定位,相当于二分查找法,每次函数运行成功,输出该函数成功到文件,虽然这样很笨,每次尝试都要重新构造版本,并且在每个函数运行完成后要输出到文件的调试代码也必不可少。但是这也是我想到的有效办法了。于是开始写输出到文件的代码,并加调试信息。


这样在构造了大约10几个安装版本后,吐下苦水,每次构造版本,并复现问题的时间大约得15分钟,写那些调试代码也总共用不了15分钟,大约两个小时以后,终于定位到了一个函数内部,大约有100行左右的代码,好,继续定位代码语句,终于定位到了几行代码内部了,太兴奋了,仔细研究下该代码。


没什么特别的就是将一个角度的变量规范化了一下,比如角度值为100,但是我要定位到0~3.14之间,就是减去2*pi的函数而已,而且该规范化函数作为一个使用了多年的公共函数我不大怀疑其正确性。但是为什么会出现问题呢???


最后看懂了这段代码以后,顿时感觉好生气,原来又是代码不规范惹得祸。


原因:代码作者定义了一个角度的变量dAngle,本身没有错,但是后来这个值并没有初始化,也就是说,这个角度并不是从一段线上来的角度,之前是一段线的角度,但是后来作者改了一个问题,不再使用该变量了,所以该值就悬空在哪里了,并且给规范化了一下。问题就在这里。delphi一般会将一个未初始化的变量赋值为0,所以调用了规范化函数并没有问题,但是有时候,会给其赋值一个随机的值,这个值可能是几百次幂的值,如果调用规范化函数,每次加3.14,就会一直卡死在这里,如果有足够的耐心,倒是也可以过去,~~~~(>_<)~~~~ ,可怜,好将该变量干掉,程序顺利运行通过……


两个多小时,浪费在了一个本不应该浪费的地方。这是我对代码规范感触最深的一次,代码干净利落,将是我永远追求的,虽然这个问题不是我引起,但是不能直到自己死了才发现避免死亡的方法,引以为鉴!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值