当前位置: 华文星空 > 知识

你最痛苦的一次找程序 bug 的经历是哪次?

2016-12-28知识

客户报了一个bug,在运行Android的板子上,一个USB硬盘反复热插拔,最终会导致硬盘被格式化。

一开始,所有人都不以为然,你一个硬盘反复热插拔那么多次有病啊。

可是不久,客户另一个硬盘也同样被格式化了。

事件极速升级

所有的领导都开始盯着了

然后,我们工程师开始重视这个bug

解bug第一步当然是复现,我们发现,连续热插拔三千次以后,就100%复现这个问题。妈的每次都是三千次以后,真的手累

第二步加打印信息narrow down,但是因为无法想清楚问题在哪里,所有只能大海捞针,在android的代码和linux的代码里都加各种打印。

然后那段时间,我们的工作状态就是:

加打印信息 -> 疯狂插拔 几个小时之后,大叫一声「我靠」,再去分析,继续加打印信息,继续疯狂插拔,继续我靠。。。。。

那段时间晚上回家连撸的欲望都没得

最终经过几周之后,终于将问题解掉了。

发现的过程太过曲折离奇,一时半会根本说不清楚,问题的根源,说出来就气人,一个工程师在内核里把一个引用definition的地方给hard code了。。。。。

从那以后,manager痛定思痛,迅速部署了gerrit

------------------------12/19更新

鉴于很多人出招如何更轻松的复现这个问题,有说USB加开关的,有说用机械臂的,有说连数字开关的,首先谢谢大家的提议。

但是我想补充的是,在当时那样的情况下,客户天天喊着量产被耽搁,自己的领导和领导的领导每隔几个小时就跑过来问进度,邮件的cc里已经出现了VP级别的人,我还能怎么样?我去找人开发一个机械臂?我去淘宝上买一个USB开关?就算马上就得到了这个USB开关,然后过了半天之后,不能复现怎么办?是分析USB开关的问题呢还是回到我自己的问题?在那种高压之下,我是万万不能再去引入额外的变量,如果引入之后问题发生了新的情况,我怎么办?

我随便一折腾就是一天过去了,领导和客户的耐心又减半了。。。我怎么办?我告诉他们我在折腾机械手臂?are you kidding?我没有办法,我只能以最稳妥的方式,一步一个脚印的去把问题理清去解决,给客户一个交代。

其实,如果有充足的时间,没人盯着没人催着,我的办法太多了,我都根本不需要那些辅助的东西,我对driver随便改改就能模拟插拔了,我甚至都不需要连一个真实的硬盘,我分分钟就能模拟一个硬盘出来。我起初做linux和android的时候,我啥都没有,就一台电脑。

作为工程师永远有很多办法,但是对某一个特定问题,只有一个最优的办法。