手记
一次 grep 把我们骗了半个月
2026-04-22
发生了什么
我们在清理模板遗留代码时, 要判断两个 CSS 类是否还在使用。做法很直接: 全仓搜索类名字面量, 命中 0, 判定为孤儿。
结论写进了记录, 并据此排除了它们作为某个显示问题的成因。
半个月后, 同一个问题在另一个页面上复现。这次我们看的是浏览器里的计算样式, 而不是源码——两个类不仅在用, 而且正是问题的成因。
原因很简单: 组件是用模板字符串拼类名的, sec--${surface}。字面量在源码里根本不存在。
为什么值得记下来
不是因为这个技术细节——它很常见。值得记的是错误结论的后续代价。
如果我们当时只是"没有结论", 下次遇到问题会重新查。但我们有一个写下来的、看起来有依据的结论, 于是后面两次排查都跳过了这条路径。★ 记录本身成了障碍。
这与我们在方法里写的"沉淀"是一体两面: 沉淀让经验可复用, 也让错误可复用。
得到的规则
- 搜索字面量只能证明"存在", 不能证明"不存在"。 动态拼接、反射调用、配置驱动的引用都不会命中。
- 判断"是否在用"要看运行时的实际状态, 而不是源码里的字符串。
- ★ 排查时若某条路径"记录说已排除", 而症状仍在, 优先重验那条路径——它恰恰是唯一没人再看的地方。
第三条现在写进了我们的排查习惯。它反直觉, 因为人的自然倾向是相信自己写下的东西。