想法与洞见

探索 AI 优先开发、编码护栏和可处置架构。

你的 main 分支挂了,要从 200 个 commit 里找出元凶

Git bisect 把手动翻 commit 变成了自动二分查找。以下是如何在不逐个 checkout 的情况下,精确定位引入 bug 的 commit。

你的 CI 在 main 上红了,但昨天还是绿的。在那之后到现在之间的某个时刻,一个 bug 溜了进来。你可以滚动浏览 200 个 commit,阅读 diff 并猜测。你可以在 Slack 里问,指望有人记得碰过相关代码。或者你可以让 Git 来干活。 是一个针对你 commit 历史的二分查找工具。你标记一个…

你的错误追踪器知道崩溃发生在哪里,但这无法帮你复现它

堆栈追踪告诉你崩溃发生的位置,而不是原因。以下是一种捕获-复现模式,能把生产环境崩溃转化为本地可调试的测试用例。

你确切知道生产环境在哪里崩溃了。堆栈追踪指向 的第 147 行。异常是一个针对 的 。你拉下代码,运行测试,全部通过。你用一个示例 payload 手动命中端点,它工作正常。 Bug 是真实的。客户在触发它。但你就是没法在自己的机器上复现。…

Symbolic Execution 发现了我 94% 测试覆盖率都遗漏的整数溢出

你的单元测试只检查特定输入,而 symbolic execution 检查所有可能的输入。以下是它的工作原理、成本以及从何入手。

你的测试套件有 94% 的覆盖率,零失败。一个 symbolic execution 引擎在三秒内就在你的代码中找到了一个崩溃。 测试没有坏。覆盖率指标没有说谎。问题在于测试只验证特定点上的行为。Symbolic execution 验证的是整个输入区域上的行为。无论你写多少示例,如果 bug…

你的日志正在泄露 PII,而 grep 救不了你

大多数团队是在客户投诉后才发现 PII 泄露。以下是如何从源头到输出全程追踪敏感数据,并附上了今天就能用的代码示例。

大多数团队在客户投诉或合规审计后才发现 PII 泄露。到那时候,数据已经穿越了 ETL 流水线,落入了应用日志,并被三种不同的可观测性工具索引了。 事后发现属于考古学。你真正需要的是一套系统,在数据进入代码的瞬间就追踪…

你的 API 在生产环境崩溃,是因为 CI 在测代码,而不是 contracts

大多数 CI 流水线能捕获语法错误和逻辑 bug,却漏掉了真正拖垮生产环境的 API contract 破坏。以下是修复方法。

我们团队中每一个进入生产环境的 API 破坏都通过了 CI。每一个。单元测试是绿的,集成测试套件通过了,部署发出后,Slack 消息就开始刷屏了。 问题不在于我们没做测试。问题在于我们测错了东西。大多数 CI 流水线验证的是代码能否运行,却不验证生产者与消费者之间的 API contract 是否仍然完整。…

Crash Correlation 会说谎。以下是如何让它们指向真正的 Bug。

Statistical debugging 找到与崩溃相关的 predicates,但相关性不是文件和行号。以下是如何通过排序、过滤和三角测量,从相关性分数找到实际的 bug 位置。

Statistical debugging 给你的是 predicates 的排序列表,而不是根因。你对每个分支和 null check 进行插桩,运行十万次执行,算法给你一个记分板。 处的 的 importance 为 0.94。 处的 也是。其中一个是 bug。另一个只是每当程序崩溃时就恰好为真。…

Sentry 的 Seer 能读懂你的 Traces。但这并不意味着它总能找到根因。

Seer 摄取 trace tree、关联的错误和性能分析数据来诊断分布式问题。以下是它的实际工作原理、擅长之处以及仍然需要人工帮助的地方。

前端抛出 500。Stack trace 指向一个 React 组件。真正的问题在三个服务之外,由泄漏的后台作业耗尽的数据库连接池。 你可以点击浏览 trace waterfall、关联时间戳并阅读提交历史。或者你可以把它交给 Sentry 的 Seer,一个由 LLM 驱动的调试代理,它读取你的…

Statistical debugging 本应终结 printf 调试时代。但大多数团队从未让它真正运转起来。

Statistical debugging 承诺通过将程序行为与故障相关联来精确定位 bug。以下是为什么这个想法从未从研究论文跨越到生产系统。

Statistical debugging 本应终结 时代。对你的代码进行插桩,从数千次运行中收集 trace,运行相关性分析,然后看着工具按照导致崩溃的可能性对每一个分支和 null check 进行排序。它在 2000…

你的测试通过了。但你的数据仍然是错的。

Statistical debugging 将你的生产数据视为信号,将 bug 视为信号中的异常。以下是如何在不添加任何 unit test 的情况下发现数据损坏、off-by-one 错误和静默故障。

你的 test suite 是绿的。你的日志很安静。你的仪表盘没有红线。然而,3% 的用户收到的发票总额是负数,或者你的推荐模型正在默默地将已删除的产品排在第一位,或者你的聚合 pipeline 正在对某个特定时区的退款进行重复计数。 这些是数据 bug。它们不会抛出异常。它们不会导致 pod 崩溃。它们通过了你的…

Metamorphic testing 发现了 147 个编译器 bug 和一个自动驾驶汽车缺陷。它是这样工作的。

Metamorphic testing 在 GCC、LLVM、Vulkan shader 编译器和 ADAS 模拟器中发现了真实 bug。本文用可运行的代码解释这项技术,并说明它在你 test suite 中的定位。

Metamorphic testing 在 GCC 和 LLVM 中发现了 147 个已确认的 bug,在汽车 OEM 使用的商用 ADAS 模拟器中发现了缺陷,并在一辆自动驾驶汽车撞死行人前八天,在其感知系统中发现了一个致命缺陷。这项技术听起来很学术,但这些 bug 并非理论虚构。 问题在于 oracle…