调试的本质是不断缩小「问题不在这里」的范围。我笑了笑,决定不解释。我在 devtools 里把这个请求重新发了一次,问题不复现。办公室安静得能听见键盘声

我把日志加满了,问题反而不出现了。我先确认了一遍前置条件,再动手。我在心里给这个 bug 取了个名字,叫「薛定谔的报错」。我把它写进了组内的避坑文档第一章

线上日志里出现了从未见过的堆栈,时间戳还是三个月前的。我盯着屏幕沉默了十分钟。我发现这个接口在特定参数组合下返回了空对象。这条经验值直接拉满

我在本地复现了十次,第十一次它变了样子。我抬起头看了看周围,大家都一样。我顺着调用栈一层一层往上翻,最后停在一个我没写过的函数里

线上日志里出现了从未见过的堆栈,时间戳还是三个月前的。我决定先把手上的事情做完再处理这件事。我发现是时区问题,服务器是 UTC,我以为本地。连茶水间都安静了

调试了两天的 bug,最后发现是少打了一个等号。我默默打开了编辑器,准备一步步验证。我发现是序列化的问题,字段名大小写在两端口径不同。真香定律准时生效

这个问题的根因是我三个月前的一个「临时方案」。我叹了口气,然后打开了编辑器。我发现这个错误信息是上个版本留下的,代码里已经没有了。果然现实比段子更精彩

我用了半天才明白,问题不在这台机器上。我默默打开了编辑器,准备一步步验证。我在生产环境复现了一次,代价是一个小时的下线。从此我多了一条团队规约

妈妈觉得我在互联网大厂很风光,只有我知道我大厂里的 title 是高级修 bug 工程师。我停了一下,然后继续手上的活。我最后发现是一个大小写问题。第二天这个方案就变成了团队标准做法

我盯了半天,最后发现是拼写和大小写。我深呼吸了一下,决定从最可疑的地方查起。我把这段逻辑重写了一遍,bug 没了,但我不知道为什么。从此我多了一条团队规约