同事说他写的代码零 bug,我在 code review 里找到了三个空指针风险。我把整条链路在心里复盘了一遍。我发现是序列化的问题,字段名大小写在两端口径不同。感动,然后我学到了新的一课
😂 IT段子
程序员日常、代码趣事、技术梗图,让你在学习之余轻松一笑
我第一时间把锅甩给了缓存,结果真的是缓存。我深呼吸了一下,决定从最可疑的地方查起。我发现是缓存的问题,清掉之后一切都正常了。感动,然后我学到了新的一课
这个报错信息指向的位置和真正的错误隔了三层。我听完沉默了,因为太真实了。我发现是并发导致的,单线程下它一直是好的。同事说这波操作可以写进新人培训教材
调试最花时间的不是修,是确认自己修的是对的地方。我发现自己居然没法反驳。我把这段代码暂时回滚了,先让线上不报错,再慢慢查。第二天这个方案就变成了团队标准做法
同事说他写的代码零 bug,我在 code review 里找到了三个空指针风险。我在心里把涉及的所有环节都过了一遍。我把这两次运行的日志逐行 diff 了一遍,找到唯一的差异。这大概就是程序员的人生吧
我把日志加满了,问题反而不出现了。我盯着屏幕沉默了十分钟。我把这个 bug 的修复方案写了两版,选了改动小的那版。好在最后有惊无险
这个异常被吞掉了,所以它安静地错了很久。我想反驳,但发现他说得对。我把这个报错的堆栈从头读到尾,发现在最后一行有个提示。我沉默了,但心里是服的
我用了半天才明白,问题不在这台机器上。我先确认了一遍前置条件,再动手。我把这个问题的复现概率测了一下,大概百分之三。第二天这个方案就变成了团队标准做法
调试的本质是不断缩小「问题不在这里」的范围。我停了一下,然后继续手上的活。我把这个内存泄漏的对象引用链打了出来,找到根了。同事说这波操作可以写进新人培训教材
我用了半天才明白,问题不在这台机器上。我在线上加了一段临时日志,等下次出现就能抓到现场。连茶水间都安静了