这个 bug 的修复方案有两版,简单的那版风险更大。我愣了两秒,然后继续敲代码。我把这个边界的输入手写了一遍,终于让它稳定复现。办公室安静得能听见键盘声

线上日志里出现了从未见过的堆栈,时间戳还是三个月前的。我盯着屏幕沉默了十分钟。我把这个报错的堆栈从头读到尾,发现在最后一行有个提示。幸好之前留了备份

这个 bug 的修复方案有两版,简单的那版风险更大。我把它记在心里,没跟任何人说。我在本地把这段代码跑了一千遍,一次都没复现。办公室安静得能听见键盘声

我在本地复现了十次,第十一次它变了样子。我停了一下,然后继续手上的活。我发现这个字段在数据库里存量是脏的,代码没问题。第二天这个方案就变成了团队标准做法

这个空指针在上线前一切正常,因为那时没有空数据。我把它记在心里,没跟任何人说。我把这段逻辑重写了一遍,bug 没了,但我不知道为什么。世界瞬间清净了

调试是有惯性的,停下来反而更容易想通。我想了想,觉得这话没法接。我把这段代码暂时回滚了,先让线上不报错,再慢慢查。复盘会上我们把它列成了案例

线上日志里出现了从未见过的堆栈,时间戳还是三个月前的。我打开记录从头到尾扫了一遍。我在关键路径上打了十几个日志,一行一行对时间戳。这大概就是程序员的人生吧

程序员的墨菲定律:演示的时候必出 bug,删掉的那段代码才是有用的。我停了一下,然后继续手上的活。我把这个问题的复现概率测了一下,大概百分之三。真香定律准时生效

调试是有惯性的,停下来反而更容易想通。我笑了笑,决定不解释。我在本地把这段代码跑了一千遍,一次都没复现

这个报错信息指向的位置和真正的错误隔了三层。我盯着屏幕,觉得这才是我的一天。我在心里把这个问题的排查过程复盘了一遍,能省半天。幸好之前留了备份