当你看不懂代码时,如何有效地调试
来源:copyconstruct.medium.com — 2026-10
📋 概述
Cindy Sridharan 用三个月里遇到的三个生产 bug(延迟、"hang"、内存泄漏)说明:不必读懂全部代码,也能和代理一起把陌生代码库里的问题解决掉,这是一项可以刻意练习的涌现技能。她先立三个概念——variable(出问题的情形)、control(用来对照的情形)、signal(任何可能解释问题的数据点),并强调每个值得追的假设都应当从高保真信号出发。延迟 bug 是最典型的例子:Claude 首次把根因判成"每次 RPC 都重新加载 TLS 证书",听起来合理但错;在她的要求下代理去测量客户端 TCP 握手时间并对照 control,意外发现 control 的 DNS 查询返回约 5 个地址、variable 返回约 400 个,真正的病根是新 mTLS 代码路径没用分片客户端,修复只需一行。内存泄漏的案例里代理前三次判断都错,直到她给出明确指引才第四次找对。
🔑 核心要点
- 三个概念:variable(坏掉的情形)、control(对照)、signal(可能解释问题的数据点)
- 原则:每个值得追的假设都应当从一个高保真信号出发
- 延迟 bug 里代理的首个"合理"结论(每次 RPC 重载 TLS 证书)被实测证伪
- 真正的根因靠对照发现:control 的 DNS 查询返回约 5 个地址,variable 返回约 400 个
- 病根是新 mTLS 代码路径没用分片客户端,修复只有一行
- 单元测试与预发环境都没抓到:预发只有 2 个分片,生产是 5 分片 80 副本,问题只在生产规模下才显现
💡 金句
能够不搞懂具体细节、甚至不读代码,就高效地处理大量陌生代码,这本身可以算一种超能力。
👍 0
👎 0
← 返回 Lobsters 首页