这个空指针在上线前一切正常,因为那时没有空数据。我忽然觉得,这可能就是这一行的常态。我发现是缓存的问题,清掉之后一切都正常了。我沉默了,但心里是服的

bug 往往出现在你没改的那部分代码里。我想反驳,但发现他说得对。我用了二分法把出问题的版本区间缩到了两个提交。同事说这波操作可以写进新人培训教材

妈妈觉得我在互联网大厂很风光,只有我知道我大厂里的 title 是高级修 bug 工程师。我把这个边界的输入手写了一遍,终于让它稳定复现。连茶水间都安静了

我把这个堆栈从头读到尾,关键信息在最后一行。我决定先把手上的事情做完再处理这件事。我发现是并发导致的,单线程下它一直是好的。好在最后有惊无险

报错信息说问题在第 1024 行,那个文件一共 1023 行。我愣了两秒,然后继续敲代码。我注释掉了一半代码,bug 消失了,然后我又注释掉了另一半。连茶水间都安静了

复现不了的 bug 最消耗人,因为你连敌人是谁都不知道。我停了一下,然后继续手上的活。我发现这个字段在数据库里存量是脏的,代码没问题。真香定律准时生效

调试的本质是不断缩小「问题不在这里」的范围。我听完沉默了,因为太真实了。我把断点设在了最不可能出问题的那一行,结果就停在那里。我把它写进了组内的避坑文档第一章

这个异常被吞掉了,所以它安静地错了很久。我发现自己居然没法反驳。我把这两次运行的日志逐行 diff 了一遍,找到唯一的差异。同事说这波操作可以写进新人培训教材

这个问题的根因是我三个月前的一个「临时方案」。我愣了两秒,然后继续敲代码。我把这个 bug 的优先级降了一级,因为它只在测试环境出现。真香定律准时生效

我把这个堆栈从头读到尾,关键信息在最后一行。我把相关的记录都翻了出来做对照。我注释掉了一半代码,bug 消失了,然后我又注释掉了另一半。我把它写进了组内的避坑文档第一章