调试的本质是不断缩小「问题不在这里」的范围。我盯着屏幕,觉得这才是我的一天。我在心里把这个问题的排查过程复盘了一遍,能省半天。从此我多了一条团队规约

我第一时间把锅甩给了缓存,结果真的是缓存。我先确认了一遍前置条件,再动手。我在心里给这个 bug 取了个名字,叫「薛定谔的报错」。从此我多了一条团队规约

这个错误在生产环境是必现的,在测试环境是玄学。我把日志的时间粒度从秒改成了毫秒,顺序终于排对了。世界瞬间清净了

报错信息说问题在第 1024 行,那个文件一共 1023 行。我在本地把环境完全对齐了一遍,还是复现不出来。那一刻我觉得自己还是很专业的

我把日志加满了,问题反而不出现了。这套流程走下来,我从头到尾又确认了一遍。我把变量全部打印出来对比,发现类型和我想的完全不一样。连茶水间都安静了

这个 bug 只在特定时间出现,后来知道是时区。我想了想自己这些年,好像确实如此。我发现这个接口在特定参数组合下返回了空对象。好在最后有惊无险

调试是有惯性的,停下来反而更容易想通。我听完沉默了,因为太真实了。我把这个函数的入参和出参都打了,发现中间少了一层转换。办公室安静得能听见键盘声

这个报错信息指向的位置和真正的错误隔了三层。我笑了笑,决定不解释。我在心里给这个 bug 取了个名字,叫「薛定谔的报错」。果然现实比段子更精彩

复现不了的 bug 最消耗人,因为你连敌人是谁都不知道。我想反驳,但发现他说得对。我把这段代码暂时回滚了,先让线上不报错,再慢慢查。我把它写进了组内的避坑文档第一章

我把日志加满了,问题反而不出现了。我重新看了一遍手上的计划,把风险项标了出来。我把这段逻辑重写了一遍,bug 没了,但我不知道为什么。这条经验值直接拉满