去年做 Android 开发的时候遇到一个极其搞笑的BUG ,自我感觉有必要说出来让大家开心开心。当时我们在做 Egret Runtime 的第一个版本,可以理解为他就是一个Android GLSurfaceView 渲染器。当我从开发工程师手中拿到第一个新鲜出炉热乎的开发版的时候,我发现一个现象,就是游戏整个 App 会不时崩溃掉,crash日志大概描述的是 C++ 挂掉了,当时我由于经验不足还不会根据 C++ 的 dumpstack 去检查是哪个模块的问题。
从前做一个嵌入式的项目,调试工具巨难用而且随机挂掉,也没有core dump,只能手工添加printf看日志调试bug。有一天出现了一个bug,查看打印日志,修改,第二天同样的bug又出现了,但是在不同的源码处。继续添加日志,查看,修改,这过程重复了n次,每次出现bug的位置都不一样。我突然醍醐灌顶,查看了下printf的源码...tnnd谁把printf函数给重载了,写入还不做校验,会写到别的内存位置上去。就像是我拿个锤子到处敲地鼠,地鼠其实住在锤子里...
不算最难的 ,算一个比较熬人的… 最近产品验收测试阶段,几轮迭代测试都显示部分手机蓝牙都一定概率丢包……但我拿那些手机做了非常多测试 也包括和测试员的一模一样的测试环境,一直没重现。最后阶段 几个人轮番测试这个bug ,除了我大家都测试到过,但只有我有环境抓到关键log………两天两夜终于抓到了这个bug
也谈谈自己遇到的一个bug吧,我之前是做电商的,某较大的电商平台,突然有一天,C2C的店主反馈,看到的订单不是自己的,看到后台的商品列表也不是自己的,当时在睡午觉,看到这个问题,立马吓醒了,平时5个投诉就是一个故障单,那还都是一点体验上的小问题,这种订单混乱,商品混乱的错误,真是要紧急死了
隔壁某实验室的一个PhD童鞋quit走人了,在他走了以后,他参与开发的一个软件出现了一个神奇的bug。bug的表现和原理很普通,但神奇之处在于,每次修改完了出问题的部分,编译出来的软件还是有这个bug,而且源文件也会抽成原来那个有bug的版本。
以前做windows技术支持,一直调试crash dump。就我个人的体验,有关线程安全的dump是最难调试的,来无影去无踪,看到的就是一坨已经被破坏的现场(dump),然后你需要在大脑中还原案发经过。






