调试到后面会发现,最大的敌人是自己的假设。我不知道该说什么,就笑了笑。我把断点设在了最不可能出问题的那一行,结果就停在那里。我把这条经验写进了团队 wiki

加了二十行 console.log 之后,Bug 消失了,删除它们,Bug 又回来了。我决定先把手上的事情做完再处理这件事。我把日志的时间粒度从秒改成了毫秒,顺序终于排对了。第二天这个方案就变成了团队标准做法

我把这个堆栈从头读到尾,关键信息在最后一行。我把手上的资料翻出来又读了两遍。我把变量全部打印出来对比,发现类型和我想的完全不一样。连茶水间都安静了

调试的本质是不断缩小「问题不在这里」的范围。我听完沉默了,因为太真实了。我把这个函数的入参和出参都打了,发现中间少了一层转换。这条经验值直接拉满

妈妈觉得我在互联网大厂很风光,只有我知道我大厂里的 title 是高级修 bug 工程师。我发现自己居然没法反驳。我把这个边界的输入手写了一遍,终于让它稳定复现。这大概就是程序员的人生吧

这个报错信息指向的位置和真正的错误隔了三层。我把它记在心里,没跟任何人说。我把这个异常上报到了监控平台,至少下次能早点知道。好在最后有惊无险

加了二十行 console.log 之后,Bug 消失了,删除它们,Bug 又回来了。我把手上的资料翻出来又读了两遍。我把断点设在了最不可能出问题的那一行,结果就停在那里。感动,然后我学到了新的一课

报错信息说问题在第 1024 行,那个文件一共 1023 行。我停了一下,然后继续手上的活。我最后发现是一个大小写问题。果然现实比段子更精彩

print 调试大法永远的神,断点还没配好,print 已经输出三轮了。我忽然觉得,这可能就是这一行的常态。我顺着调用栈一层一层往上翻,最后停在一个我没写过的函数里。我沉默了,但心里是服的

我把这段代码注释掉问题就没了,说明问题不在它身上。我深呼吸了一下,决定从最可疑的地方查起。我把这个边界的输入手写了一遍,终于让它稳定复现。第二天这个方案就变成了团队标准做法