代码没有任何改动,为什么程序执行会有Bug?
题记:工作中经常遇到开发不同的版本,如版本5.1、版本5.2,5.2版本是在5.1版本上的升级,会修改已有几个模块的功能或者新增功能。但对于其中一个模块M,没有做任何修改,奇怪的是,为什么5.2版本的模块M会有Bug?
如题记,工作中经常遇到的场景。前几天排查问题,我也越到了同样的问题,明明A插件模块是较基准模块没有任何代码改动。但发现新版本下运行时,没有在缓冲磁盘下生成缓存索引和缓存文件。排查了很久,终于真相大白。
特将排查方法总结如下:
最初始,打开控制台(前台)日志,看出Bug的地方。并且通过配置文件,打开日志开关,确保运行能看到最全的日志。由于我们提供客户的环境,默认不会打开后台日志的,这点也非常关键。
一、确认新模块较基准模块有无任何改动。
最原始、最有效的方法直接通过BeyondCompare软件对比两个模块的所有文件,确认是否有改动。
二、有改动,则在改动的地方细细排查。
改动的地方无非是本版本新增功能,或者改动功能。然后再确认上面的Bug是否是改动引发导致。
三、无改动,则从相关调用模块逐个排查,并排查文件的配置等相关辅助文件有无改动。
说起来容易,三很难做到。如果确认无改动,就应立即转战看有没有模块间调用,直接调用或者回调。从接口从发,排查是否接口调用出错引发。
如果非接口调用,还要再排查。对比运行同样的功能,如启停服务,仔细对比新、旧版本的每一行日志,找打不同点。
我这里出的特殊情况,就是对应的缓存目录文件没有读到,导致的错误。但细想下,没有读到文件,肯定是没有写入,为什么没有写入?问题基本上就快追查到了。
最终排查的结果是:由于平台不同,早期版本是硬件版本,对磁盘没有要求,所以读配置判定磁盘大小都能达到要求。但是新版本是虚拟版本,磁盘做了限制,但是仍然读的是早期版本的配置,导致判定出错,问题水落石出。
修改方法:根据新版本磁盘文件,修改配置文件的参数,修改后Bug不再出现。并反复测试,确保所有场景都不复现,至此,Bug彻底消灭。
总结:即便是生疏的模块,即便模块负责人已经不在,回头看下,也无非上面的思路去排查。一条路行不通,要大胆的揣测和进行Next思路的排查。
2015-2-1 pm19:28 思于家中床前
作者:铭毅天下
转载请标明出处,原文地址:
如果感觉本文对您有帮助,请点击‘顶’支持一下,您的支持是我坚持写作最大的动力,谢谢!