同事说他写的代码零 bug,我在 code review 里找到了三个空指针风险。我盯着屏幕沉默了十分钟。我在心里把这个 bug 的可能性列了五条,第一条就对了。这大概就是程序员的人生吧

调试了两天的 bug,最后发现是少打了一个等号。我深呼吸了一下,决定从最可疑的地方查起。我在第一步就设了个断言,结果它当场就炸了。幸好之前留了备份

同事说他写的代码零 bug,我在 code review 里找到了三个空指针风险。我拉了个小群,把相关同学都叫了进来。我把这两次运行的日志逐行 diff 了一遍,找到唯一的差异。果然现实比段子更精彩

复现不了的 bug 最消耗人,因为你连敌人是谁都不知道。我不知道该说什么,就笑了笑。我把这个异常的类型打出来,发现它被包了三层。连茶水间都安静了

这个 bug 的修复方案有两版,简单的那版风险更大。我叹了口气,然后打开了编辑器。我在心里把这个 bug 的可能性列了五条,第一条就对了。我把这条经验写进了团队 wiki

加了二十行 console.log 之后,Bug 消失了,删除它们,Bug 又回来了。我打开记录从头到尾扫了一遍。我发现问题出在一个我以为永远不会被触发的分支里。第二天这个方案就变成了团队标准做法

我在本地复现了十次,第十一次它变了样子。我在心里点了点头。我把这个报错的堆栈从头读到尾,发现在最后一行有个提示。复盘会上我们把它列成了案例

这个空指针在上线前一切正常,因为那时没有空数据。我停了一下,然后继续手上的活。我发现这个字段在数据库里存量是脏的,代码没问题。幸好之前留了备份

同事说他写的代码零 bug,我在 code review 里找到了三个空指针风险。我先给自己泡了杯茶,做好了打持久战的准备。我把这个异常的类型打出来,发现它被包了三层。我沉默了,但心里是服的

调试最花时间的不是修,是确认自己修的是对的地方。我听完沉默了,因为太真实了。我在心里给这个 bug 取了个名字,叫「薛定谔的报错」。这大概就是程序员的人生吧