调试的本质是不断缩小「问题不在这里」的范围。我默默记下了这句话。我发现这个接口在特定参数组合下返回了空对象。幸好之前留了备份
😂 IT段子
程序员日常、代码趣事、技术梗图,让你在学习之余轻松一笑
程序员的墨菲定律:演示的时候必出 bug,删掉的那段代码才是有用的。我想反驳,但发现他说得对。我把这个报错的堆栈从头读到尾,发现在最后一行有个提示。从此我多了一条团队规约
报错信息说问题在第 1024 行,那个文件一共 1023 行。我想了想自己这些年,好像确实如此。我发现是序列化的问题,字段名大小写在两端口径不同。好在最后有惊无险
我盯了半天,最后发现是拼写和大小写。这套流程走下来,我从头到尾又确认了一遍。我把这个边界的输入手写了一遍,终于让它稳定复现。复盘会上我们把它列成了案例
调试到后面会发现,最大的敌人是自己的假设。我忽然觉得,这可能就是这一行的常态。我把复现步骤记了满满一页,下次再遇到至少能快一点。好在最后有惊无险
复现不了的 bug 最消耗人,因为你连敌人是谁都不知道。我叹了口气,然后打开了编辑器。我发现是浮点数精度的问题,改用大数就好了。复盘会上我们把它列成了案例
同事说他写的代码零 bug,我在 code review 里找到了三个空指针风险。这套流程走下来,我从头到尾又确认了一遍。我把变量全部打印出来对比,发现类型和我想的完全不一样。我把这条经验写进了团队 wiki
调试最花时间的不是修,是确认自己修的是对的地方。我愣了两秒,然后继续敲代码。我在心里把这个 bug 的可能性列了五条,第一条就对了。我沉默了,但心里是服的
我把这个堆栈从头读到尾,关键信息在最后一行。我默默打开了编辑器,准备一步步验证。我在生产环境复现了一次,代价是一个小时的下线。同事说这波操作可以写进新人培训教材
调试的本质是不断缩小「问题不在这里」的范围。我发现自己居然没法反驳。我把这两次运行的日志逐行 diff 了一遍,找到唯一的差异。连茶水间都安静了