woshale.com
← 返回博客

深夜的编译错误教会我的事

凌晨两点,一个本地跑得好好的项目在服务器上编译失败,报错指向第 217 行的类型不匹配。我盯着那行代码看了四十分钟,它无辜得像刚洗过的白衬衫。

四个小时的完整弯路

真相只有一行

日志第 38 行写着:warning: configuration file not found, using defaults。服务器上根本没有那份配置文件,程序一路用默认值跑,默认值里一个路径写死了本地目录,才在 217 行炸出那个与我无缘的类型错误。真正的病根在 179 行之前,而我从第 217 行开始考古。

调试最贵的成本从来不是修复那一行,是你带着错误假设跑过的四个小时。

从此生效的三条军规

  1. 从第一条日志读起:报错现场往往在尸检报告的最后一页,但病因从来不在那里;
  2. 凌晨两点不做架构决策:改类型、换框架、升级编译器都属于这一类,睡醒再做,问题通常在枕头上就解了;
  3. 设一个 45 分钟闹钟:同一问题钻研超过 45 分钟还没头绪,强制起身写"问题陈述"——用三句话向外人描述它。多数时候,写到第二句就发现了自己的假设漏洞。

那次事故的修复时间:删除一行注释、上传一个配置文件,用时 40 秒。四小时与 40 秒的差值,就是假设未经检验的代价。现在它是我带新人时必讲的故事,讲完都要补一句:日志,从第一行开始读。

← 更多文章 聊聊这篇 →