188、二分定位法:从万行代码到一行 bug 的工程化搜索策略
188、二分定位法:从万行代码到一行 bug 的工程化搜索策略上周三凌晨两点,我盯着屏幕上那个诡异的 500 错误,咖啡已经凉透了。日志里只留下一行“IndexError: list index out of range”,没有堆栈上下文,没有请求参数,甚至不知道是哪个接口触发的。生产环境,十万行代码,二十个微服务,我该从哪里开始?这种场景你一定不陌生。大多数人的第一反应是“全局搜索 IndexError”,然后对着几十个可能的位置发呆。或者更糟——在代码里到处加 print,重启服务,复现,再重启,再复现。这不是调试,这是碰运气。从“猜”到“定位”的思维转变我花了整整七年才真正理解一件事:调试不是找 bug,而是缩小范围。你不需要知道 bug 在哪,你只需要知道 bug 不在哪。二分定位法的核心就一句话:每次操作,把问题空间缩小一半。听起来简单,但工程化落地需要三个工具:日志分层、代码注释标记、以及最重要的——心理素质。第一层:日志不是用来读的,是用来切的很多人写日志像写日记——“程序开始运行”“程序结束运行”。这种日志除了占磁盘空间,对定位问题毫无帮助。真正的工程化日志应该像手术刀。我习惯在关键路径上埋下“边界日志”:# 这里踩过坑:不要只打印变量值,要打印变量名+值+上下文logger