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

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

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


      特将排查方法总结如下:


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


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


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


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


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


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


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


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


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


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


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


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


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
8月前
|
测试技术 API
修改bug引入更多bug怎么办?
修改bug引入更多bug怎么办?
161 0
|
8月前
在代码优化过程中,常见的错误和bug包括以下几点
在代码优化过程中,常见的错误和bug包括以下几点
|
5月前
|
存储 缓存 Java
hyengine编译实现问题之复用 quickjs 原代码如何解决
hyengine编译实现问题之复用 quickjs 原代码如何解决
|
5月前
|
存储
hyengine 编译问题之创建对象异常如何解决
hyengine 编译问题之创建对象异常如何解决
|
7月前
|
JavaScript Java
做小程序时遇到的bug
做小程序时遇到的bug
|
小程序 Android开发 iOS开发
小程序 | 小程序修复了一些bug
前段时间,有朋友反应小程序的今天吃个啥有bug,不能正常使用。
157 0
|
安全 编译器 Go
读<一例 Go 编译器代码优化 bug 定位和修复解析>
读<一例 Go 编译器代码优化 bug 定位和修复解析>
113 0
|
Java
以下代码找bug
以下代码找bug
137 0
|
Java 应用服务中间件 Docker
同事嫌我改Bug慢,原来是没掌握这些代码Debug技巧
代码Debug调试是研发工程师日常工作中必不可少的重要组成部分。进行代码Debug调试的目的无非就两个,一个是自我检查代码逻辑是否有问题,便于自己将Bug消灭在测试介入之前;另一个是进行线上问题排查定位,找到实际在跑业务的过程中出现的Bug。
同事嫌我改Bug慢,原来是没掌握这些代码Debug技巧
|
前端开发 计算机视觉 Python
代码报错还好说,源码报错才难搞!分享自己源码报错的解决过程!
代码报错还好说,源码报错才难搞!分享自己源码报错的解决过程!
148 0
代码报错还好说,源码报错才难搞!分享自己源码报错的解决过程!