bug 往往出现在你没改的那部分代码里。我想了想自己这些年,好像确实如此。我把这个死循环的跳出条件补上了,进程终于不卡了。这条经验值直接拉满

我用了半天才明白,问题不在这台机器上。我在关键路径上打了十几个日志,一行一行对时间戳。我把它写进了组内的避坑文档第一章

bug 的优先级取决于谁发现了它。我不知道该说什么,就笑了笑。我把复现步骤记了满满一页,下次再遇到至少能快一点。这大概就是程序员的人生吧

调试到后面会发现,最大的敌人是自己的假设。我听完沉默了,因为太真实了。我发现问题出在一个我以为永远不会被触发的分支里

这个 bug 的修复方案有两版,简单的那版风险更大。我在心里点了点头。我把这个函数的入参和出参都打了,发现中间少了一层转换。这大概就是程序员的人生吧

print 调试大法永远的神,断点还没配好,print 已经输出三轮了。我愣了两秒,然后继续敲代码。我把变量全部打印出来对比,发现类型和我想的完全不一样。我沉默了,但心里是服的

调试最花时间的不是修,是确认自己修的是对的地方。我把断点设在了最不可能出问题的那一行,结果就停在那里。从此我多了一条团队规约

妈妈觉得我在互联网大厂很风光,只有我知道我大厂里的 title 是高级修 bug 工程师。我默默记下了这句话。我发现这个接口在特定参数组合下返回了空对象。那一刻我觉得自己还是很专业的

这个 bug 的修复方案有两版,简单的那版风险更大。我不知道该说什么,就笑了笑。我用了二分法把出问题的版本区间缩到了两个提交。这大概就是程序员的人生吧

我把这段代码注释掉问题就没了,说明问题不在它身上。这套流程走下来,我从头到尾又确认了一遍。我在心里给这个 bug 取了个名字,叫「薛定谔的报错」。果然现实比段子更精彩