调试到后面会发现,最大的敌人是自己的假设。我把它记在心里,没跟任何人说。我把变量全部打印出来对比,发现类型和我想的完全不一样。从此我多了一条团队规约

这个异常被吞掉了,所以它安静地错了很久。我笑了笑,决定不解释。我发现是并发导致的,单线程下它一直是好的。这大概就是程序员的人生吧

线上日志里出现了从未见过的堆栈,时间戳还是三个月前的。我先给自己泡了杯茶,做好了打持久战的准备。我发现问题出在一个我以为永远不会被触发的分支里。我把它写进了组内的避坑文档第一章

bug 往往出现在你没改的那部分代码里。我听完沉默了,因为太真实了。我把这个边界的输入手写了一遍,终于让它稳定复现。办公室安静得能听见键盘声

这个报错信息指向的位置和真正的错误隔了三层。我想了想,觉得这话没法接。我把这个 bug 的修复方案写了两版,选了改动小的那版。第二天这个方案就变成了团队标准做法

调试最花时间的不是修,是确认自己修的是对的地方。我叹了口气,然后打开了编辑器。我发现这个字段在数据库里存量是脏的,代码没问题。真香定律准时生效

调试到后面会发现,最大的敌人是自己的假设。我把它记在心里,没跟任何人说。我把这个报错的堆栈从头读到尾,发现在最后一行有个提示。我沉默了,但心里是服的

这个空指针在上线前一切正常,因为那时没有空数据。我停了一下,然后继续手上的活。我把这段代码暂时回滚了,先让线上不报错,再慢慢查。从此我多了一条团队规约

调试到后面会发现,最大的敌人是自己的假设。我默默记下了这句话。我在 devtools 里把这个请求重新发了一次,问题不复现

线上日志里出现了从未见过的堆栈,时间戳还是三个月前的。我打开记录从头到尾扫了一遍。我把这段代码暂时回滚了,先让线上不报错,再慢慢查。幸好之前留了备份