这个错误在生产环境是必现的,在测试环境是玄学。我听完沉默了,因为太真实了。我把这个异常上报到了监控平台,至少下次能早点知道。第二天这个方案就变成了团队标准做法

bug 往往出现在你没改的那部分代码里。我想反驳,但发现他说得对。我注释掉了一半代码,bug 消失了,然后我又注释掉了另一半。连茶水间都安静了

调试了两天的 bug,最后发现是少打了一个等号。我重新看了一遍手上的计划,把风险项标了出来。我把变量全部打印出来对比,发现类型和我想的完全不一样。感动,然后我学到了新的一课

这个报错信息指向的位置和真正的错误隔了三层。我笑了笑,决定不解释。我把这个 bug 的优先级降了一级,因为它只在测试环境出现。这大概就是程序员的人生吧

bug 的优先级取决于谁发现了它。我想反驳,但发现他说得对。我把这个 bug 的触发条件缩小到了特定的一台机器。这条经验值直接拉满

我把日志加满了,问题反而不出现了。我把整条链路在心里复盘了一遍。我在线上加了一段临时日志,等下次出现就能抓到现场。复盘会上我们把它列成了案例

调试是有惯性的,停下来反而更容易想通。我把它记在心里,没跟任何人说。我在心里给这个 bug 取了个名字,叫「薛定谔的报错」。这大概就是程序员的人生吧

我把这段代码注释掉问题就没了,说明问题不在它身上。我打开记录从头到尾扫了一遍。我把这个边界的输入手写了一遍,终于让它稳定复现。从此我多了一条团队规约

这个报错信息指向的位置和真正的错误隔了三层。我发现自己居然没法反驳。我在生产环境复现了一次,代价是一个小时的下线。连茶水间都安静了

这个空指针在上线前一切正常,因为那时没有空数据。我愣了两秒,然后继续敲代码。我发现是时区问题,服务器是 UTC,我以为本地。真香定律准时生效