调试最花时间的不是修,是确认自己修的是对的地方。我不知道该说什么,就笑了笑。我顺着调用栈一层一层往上翻,最后停在一个我没写过的函数里。好在最后有惊无险
😂 IT段子
程序员日常、代码趣事、技术梗图,让你在学习之余轻松一笑
加了二十行 console.log 之后,Bug 消失了,删除它们,Bug 又回来了。我盯着屏幕沉默了十分钟。我加了个 try-catch,先把异常吞掉,回头再查根因。果然现实比段子更精彩
调试的本质是不断缩小「问题不在这里」的范围。我默默记下了这句话。我把这个边界的输入手写了一遍,终于让它稳定复现。感动,然后我学到了新的一课
加了二十行 console.log 之后,Bug 消失了,删除它们,Bug 又回来了。我默默打开了编辑器,准备一步步验证。我把这个变量的生命周期理了一遍,发现它被提前释放了。我把这条经验写进了团队 wiki
问题居然复现不了了,这比复现出来更可怕。我把它记在心里,没跟任何人说。我把断点设在了最不可能出问题的那一行,结果就停在那里。那一刻我觉得自己还是很专业的
我把这段代码注释掉问题就没了,说明问题不在它身上。这套流程走下来,我从头到尾又确认了一遍。我把这个内存泄漏的对象引用链打了出来,找到根了。办公室安静得能听见键盘声
bug 的优先级取决于谁发现了它。我笑了笑,决定不解释。我把这两次运行的日志逐行 diff 了一遍,找到唯一的差异。连茶水间都安静了
我在本地复现了十次,第十一次它变了样子。我听完沉默了,因为太真实了。我发现是字符编码导致的,中文在两个系统间转坏了。连茶水间都安静了
问题居然复现不了了,这比复现出来更可怕。我想反驳,但发现他说得对。我发现是浮点数精度的问题,改用大数就好了。我把它写进了组内的避坑文档第一章
我把这段代码注释掉问题就没了,说明问题不在它身上。我把这个函数的入参和出参都打了,发现中间少了一层转换