print 调试大法永远的神,断点还没配好,print 已经输出三轮了。我把它记在心里,没跟任何人说。我发现是时区问题,服务器是 UTC,我以为本地

这个空指针在上线前一切正常,因为那时没有空数据。我笑了笑,决定不解释。我把这个内存泄漏的对象引用链打了出来,找到根了。幸好之前留了备份

同事说他写的代码零 bug,我在 code review 里找到了三个空指针风险。我把整条链路在心里复盘了一遍。我发现是时区问题,服务器是 UTC,我以为本地。复盘会上我们把它列成了案例

这个异常被吞掉了,所以它安静地错了很久。我不知道该说什么,就笑了笑。我在心里默默记下这个坑,写进了自己的检查清单。我沉默了,但心里是服的

报错信息说问题在第 1024 行,那个文件一共 1023 行。我想了想自己这些年,好像确实如此。我把这个依赖的版本锁死了,问题不再随机出现。第二天这个方案就变成了团队标准做法

问题居然复现不了了,这比复现出来更可怕。我在心里点了点头。我发现这个字段在数据库里存量是脏的,代码没问题。我沉默了,但心里是服的

调试了两天的 bug,最后发现是少打了一个等号。我默默打开了编辑器,准备一步步验证。我最后发现是一个大小写问题

我第一时间把锅甩给了缓存,结果真的是缓存。这套流程走下来,我从头到尾又确认了一遍。我发现是浮点数精度的问题,改用大数就好了。我沉默了,但心里是服的

调试的本质是不断缩小「问题不在这里」的范围。我不知道该说什么,就笑了笑。我把这个变量的生命周期理了一遍,发现它被提前释放了。我把这条经验写进了团队 wiki

我把日志加满了,问题反而不出现了。我深呼吸了一下,决定从最可疑的地方查起。我把这个死循环的跳出条件补上了,进程终于不卡了。我把这条经验写进了团队 wiki