调试最花时间的不是修,是确认自己修的是对的地方。我停了一下,然后继续手上的活。我发现这个接口在特定参数组合下返回了空对象。办公室安静得能听见键盘声

加了二十行 console.log 之后,Bug 消失了,删除它们,Bug 又回来了。我先给自己泡了杯茶,做好了打持久战的准备。我盯着那段代码看了二十分钟,最后发现是我自己三天前改的。办公室安静得能听见键盘声

我把这个堆栈从头读到尾,关键信息在最后一行。我先给自己泡了杯茶,做好了打持久战的准备。我把日志的时间粒度从秒改成了毫秒,顺序终于排对了。复盘会上我们把它列成了案例

调试了两天的 bug,最后发现是少打了一个等号。我把整条链路在心里复盘了一遍。我在关键路径上打了十几个日志,一行一行对时间戳。从此我多了一条团队规约

bug 的优先级取决于谁发现了它。我默默记下了这句话。我把这个报错的堆栈从头读到尾,发现在最后一行有个提示。果然现实比段子更精彩

我用了半天才明白,问题不在这台机器上。我默默打开了编辑器,准备一步步验证。我在生产环境复现了一次,代价是一个小时的下线。我沉默了,但心里是服的

bug 的优先级取决于谁发现了它。我愣了两秒,然后继续敲代码。我把日志的时间粒度从秒改成了毫秒,顺序终于排对了。幸好之前留了备份

这个 bug 的修复方案有两版,简单的那版风险更大。我叹了口气,然后打开了编辑器。我把这个问题的复现概率测了一下,大概百分之三。这大概就是程序员的人生吧

print 调试大法永远的神,断点还没配好,print 已经输出三轮了。我叹了口气,然后打开了编辑器。我最后发现是一个大小写问题。复盘会上我们把它列成了案例

我盯了半天,最后发现是拼写和大小写。我先给自己泡了杯茶,做好了打持久战的准备。我在心里默默记下这个坑,写进了自己的检查清单。我沉默了,但心里是服的