首页 > 代码库 > 代码没有任何改动,为什么程序执行会有Bug?

代码没有任何改动,为什么程序执行会有Bug?

代码没有任何改动,为什么程序执行会有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 思于家中床前

 

作者:铭毅天下

转载请标明出处,原文地址:

如果感觉本文对您有帮助,请点击‘顶’支持一下,您的支持是我坚持写作最大的动力,谢谢!

 

代码没有任何改动,为什么程序执行会有Bug?