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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 工作中经常遇到开发不同的版本,如版本5.1、版本5.2,5.2版本是在5.1版本上的升级,会修改已有几个模块的功能或者新增功能。但对于其中一个模块M,没有做任何修改,奇怪的是,为什么5.2版本的模块M会有Bug?

题记

工作中经常遇到开发不同的版本,如版本5.1、版本5.2,5.2版本是在5.1版本上的升级,会修改已有几个模块的功能或者新增功能。但对于其中一个模块M,没有做任何修改,奇怪的是,为什么5.2版本的模块M会有Bug?

如题记,工作中经常遇到的场景。前几天排查问题,我也越到了同样的问题,明明A插件模块是较基准模块没有任何代码改动。但发现新版本下运行时,没有在缓冲磁盘下生成缓存索引和缓存文件。排查了很久,终于真相大白。

特将排查方法总结如下:

最初始,打开控制台(前台)日志,看出Bug的地方。并且通过配置文件,打开日志开关,确保运行能看到最全的日志。由于我们提供客户的环境,默认不会打开后台日志的,这点也非常关键。

一、确认新模块较基准模块有无任何改动。

最原始、最有效的方法直接通过BeyondCompare软件对比两个模块的所有文件,确认是否有改动。

二、有改动,则在改动的地方细细排查。

改动的地方无非是本版本新增功能,或者改动功能。然后再确认上面的Bug是否是改动引发导致。

三、无改动,则从相关调用模块逐个排查,并排查文件的配置等相关辅助文件有无改动。

说起来容易,三很难做到。如果确认无改动,就应立即转战看有没有模块间调用,直接调用或者回调。从接口从发,排查是否接口调用出错引发。

如果非接口调用,还要再排查。对比运行同样的功能,如启停服务,仔细对比新、旧版本的每一行日志,找出不同点。

我这里出的特殊情况,就是对应的缓存目录文件没有读到,导致的错误。但细想下,没有读到文件,肯定是没有写入,为什么没有写入?问题基本上就快追查到了。

最终排查的结果是:由于平台不同,早期版本是硬件版本,对磁盘没有要求,所以读配置判定磁盘大小都能达到要求。但是新版本是虚拟版本,磁盘做了限制,但是仍然读的是早期版本的配置,导致判定出错,问题水落石出。

修改方法:根据新版本磁盘文件,修改配置文件的参数,修改后Bug不再出现。并反复测试,确保所有场景都不复现,至此,Bug彻底消灭。

总结

即便是生疏的模块,即便模块负责人已经不在,回头看下,也无非上面的思路去排查。一条路行不通,要大胆的揣测和进行Next思路的排查。

 


作者:铭毅天下

转载请标明出处,原文地址:http://blog.csdn.net/laoyang360/article/details/43373663

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
6月前
|
测试技术 API
修改bug引入更多bug怎么办?
修改bug引入更多bug怎么办?
128 0
|
6月前
|
设计模式 算法 前端开发
有什么可以减少注释,但依然能让他人看得懂代码的方法吗?
有什么可以减少注释,但依然能让他人看得懂代码的方法吗?
56 0
|
3月前
|
存储 缓存 Java
hyengine编译实现问题之复用 quickjs 原代码如何解决
hyengine编译实现问题之复用 quickjs 原代码如何解决
|
5月前
|
JavaScript Java
做小程序时遇到的bug
做小程序时遇到的bug
|
6月前
|
安全 程序员 C++
bug的定义以及VS调试方法
bug的定义以及VS调试方法
129 1
|
小程序 Android开发 iOS开发
小程序 | 小程序修复了一些bug
前段时间,有朋友反应小程序的今天吃个啥有bug,不能正常使用。
140 0
|
安全 编译器 Go
读<一例 Go 编译器代码优化 bug 定位和修复解析>
读<一例 Go 编译器代码优化 bug 定位和修复解析>
104 0
|
Java
以下代码找bug
以下代码找bug
121 0
|
JSON Java Android开发
每次调试打印日志都很头痛
每次调试打印日志都很头痛
122 0
|
测试技术
R问题|代码报错如何解决?
R问题|代码报错如何解决?
286 0