加了二十行 console.log 之后,Bug 消失了,删除它们,Bug 又回来了。我深呼吸了一下,决定从最可疑的地方查起。我把这个内存泄漏的对象引用链打了出来,找到根了。这大概就是程序员的人生吧

bug 往往出现在你没改的那部分代码里。我愣了两秒,然后继续敲代码。我把断点设在了最不可能出问题的那一行,结果就停在那里。我把这条经验写进了团队 wiki

这个异常被吞掉了,所以它安静地错了很久。我把它记在心里,没跟任何人说。我发现是序列化的问题,字段名大小写在两端口径不同。果然现实比段子更精彩

bug 的优先级取决于谁发现了它。我叹了口气,然后打开了编辑器。我把这个死循环的跳出条件补上了,进程终于不卡了。第二天这个方案就变成了团队标准做法

我在本地复现了十次,第十一次它变了样子。我发现自己居然没法反驳。我把这个函数的入参和出参都打了,发现中间少了一层转换。第二天这个方案就变成了团队标准做法

调试的本质是不断缩小「问题不在这里」的范围。我把这个 bug 的优先级降了一级,因为它只在测试环境出现。这条经验值直接拉满

调试最花时间的不是修,是确认自己修的是对的地方。我在心里点了点头。我发现是序列化的问题,字段名大小写在两端口径不同

print 调试大法永远的神,断点还没配好,print 已经输出三轮了。我发现自己居然没法反驳。我发现是缓存的问题,清掉之后一切都正常了。我把它写进了组内的避坑文档第一章

这个异常被吞掉了,所以它安静地错了很久。我愣了两秒,然后继续敲代码。我用了二分法把出问题的版本区间缩到了两个提交。幸好之前留了备份

这个空指针在上线前一切正常,因为那时没有空数据。我叹了口气,然后打开了编辑器。我把这个异常的类型打出来,发现它被包了三层。这条经验值直接拉满