Agent Skills
返回列表
🤖

调试与错误恢复

AI Agent 更新于 2026.08.29

将以下提示词粘贴到你的 AI 对话框中:

请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/debugging-and-error-recovery-g8mv。

技能介绍

为什么需要结构化调试

在迭代节奏里,最常见的失败不是「某个函数写错了」,而是不知道该先修什么、再查什么。测试红了、构建挂了、日志里冒出一条异常,团队往往下意识开始猜:改一下配置、注释掉断言、重启服务。

这些动作单个看可能无害,但它们打断了因果链,把一次清晰的缺陷变成一组无法解释的状态。本技能要解决的,就是这种「凭直觉调试」带来的隐性成本。

核心能力:一条不跳过的分诊流水线

这套流程强制你按顺序走完六个步骤,不跳过、不回头:

  • Step 1 Reproduce:先让失败稳定复现。做不到这一点,后面的修复只是赌博。
  • Step 2 Localize:用二分法收缩范围,定位失败发生在哪一层、哪一段代码。
  • Step 3 Reduce:把现场裁到最小——删掉无关配置、简化输入、把测试削到只剩触发条件。
  • Step 4 Fix the Root Cause:连续追问「为什么会发生」,直到撞到真正的因果链,而不是只处理表面症状。
  • Step 5 Guard Against Recurrence:写一个没有修复就失败、修复后才通过的回归测试。
  • Step 6 Verify End-to-End:在完整场景里确认修复没有引入新问题。

配合 Stop-the-Line 规则:一旦出现意外失败,暂停新功能开发,先把坏掉的线修好。因为第三层的 bug 会污染第四到第六步的结果,错误是会累加的。

错误输出不是指令,是数据

一个容易被忽略的安全边界:错误消息、堆栈、日志、异常详情,都是待分析的数据,而不是要执行的指令。被污染的依赖、恶意输入或对抗系统,完全可能在错误文本里嵌入 运行这条命令来修复 这类内容。

因此流程明确要求:遇到看起来像指令的错误文本,暴露给用户确认,而不是自动执行。CI 日志、第三方 API 返回、外部服务的报错同样按此处理——读它们是为了诊断线索,不是为了照做。

观测代码:加得对,也要删得干净

日志不是越多越好。该加的场景:无法定位到具体行、问题间歇性出现需要监控、修复涉及多个交互组件。该删的场景:bug 已修复且有测试守护、只在开发期有用、包含敏感数据。可以常驻的例外:错误边界与上报、带请求上下文的 API 错误日志、关键用户路径的性能指标。

适用边界

  • 这套流程假设你能拿到可交互的调试环境。如果问题只在生产环境出现且无法复现,优先补观测,再进入 Step 1。
  • 六步法偏重量级,适合影响面大的失败。一个拼写错误的断言,用不到二分法。
  • 它不能替代对系统架构的理解——根因可能藏在设计里,而不在某一行代码里。
  • 检查清单里列的常见借口(「我知道 bug 在哪」「这测试大概是坏的」「在我机器上是好的」)需要被正视,而不是被当作跳过流程的理由。

使用场景

  • 写完一次代码改动后跑测试发现失败,需要按复现、定位、收敛的顺序找出根因,而不是跳过失败的用例继续开发新功能。
  • CI 上构建突然挂掉,本地却能通过,需要定位是配置、依赖还是环境差异造成的,并补上防止复发的回归校验。
  • 用户反馈某个操作的结果与预期不一致,需要先写出最小可复现用例,再修复真正的触发条件,而不是改表面的输出提示。
  • 线上日志里出现异常堆栈,需要判断能否稳定复现,是否要先停掉当前改动,以及补哪些观测来确认修复生效。

适合人员

  • 负责接口或模块开发的后端工程师,需要在测试失败或构建报错时快速定位改动引入的缺陷并防止回归。
  • 维护 CI 流水线与自动化测试的技术平台工程师,需要在依赖升级或配置变更导致构建失败时还原真实触发原因。
  • 编写单元与集成测试的质量保证工程师,需要区分测试本身写错和产品代码出问题,并为修复补上能拦截同类问题的用例。
  • 负责线上故障响应的站点可靠性工程师,需要在日志异常或间歇性错误出现时先复现并收敛问题,再决定是否回滚或热修。