skills/systematic-debugging/SKILL.md
系统化四阶段调试(根因调查→模式分析→假设与测试→实施修复),铁律:先找到根因才能修复。触发:任何 bug、测试失败、异常行为、性能问题、构建失败、集成问题。时间紧迫或修复看似「显然」时最容易被跳过——反而最应该用。3+ 次修复失败后质疑架构,不再打补丁。修复前必须定位到此技能引用文件的根因。
npx skillsauth add Chikage0o0/opencode systematic-debuggingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
随机修复浪费时间并制造新 bug。快速补丁掩盖了根本问题。
核心原则: 必须先找到根因,才能尝试修复。修复症状是失败的。
违反此流程的文字,就是违反调试的精神。
未调查根因,不得修复
如果你尚未完成第一阶段,则不能提出修复方案。
适用于任何技术问题:
尤其应在以下情况使用:
不要跳过的情况:
你必须在进入下一阶段前完成当前阶段。
在尝试任何修复之前:
仔细阅读错误信息
一致地复现
检查近期变更
在多组件系统中收集证据
当系统包含多个组件时(CI → 构建 → 签名,API → 服务 → 数据库):
在提出修复方案之前,添加诊断插桩:
对于每个组件边界:
- 记录进入组件的数据
- 记录离开组件的数据
- 验证环境/配置传递
- 检查每一层的状态
运行一次以收集证据,显示问题在哪里中断
然后分析证据以识别失败的组件
然后调查该特定组件
示例(多层系统):
# Layer 1: Workflow
echo "=== Secrets available in workflow: ==="
echo "IDENTITY: ${IDENTITY:+SET}${IDENTITY:-UNSET}"
# Layer 2: Build script
echo "=== Env vars in build script: ==="
env | grep IDENTITY || echo "IDENTITY not in environment"
# Layer 3: Signing script
echo "=== Keychain state: ==="
security list-keychains
security find-identity -v
# Layer 4: Actual signing
codesign --sign "$IDENTITY" --verbose=4 "$APP"
这揭示了: 哪一层失败(secrets → workflow ✓, workflow → build ✗)
追踪数据流
当错误位于调用栈深处时:
请参阅本目录中的 root-cause-tracing.md,了解完整的反向追踪技术。
快速版本:
在修复之前找到模式:
寻找正常工作的示例
与参考资料对比
识别差异
理解依赖关系
科学方法:
形成单一假设
最小化测试
在继续之前验证
当你不知道时
修复根因,而非症状:
创建失败的测试用例
test-driven-development 技能编写适当的失败测试实施单一修复
验证修复
如果修复不起作用
如果 3+ 次修复失败:质疑架构
指示架构问题的模式:
停止并质疑基本问题:
在尝试更多修复之前,与你的 human partner 讨论
这不是失败的假设——这是错误的架构。
如果你发现自己这样想:
以上所有都意味着:停止。回到第一阶段。
如果 3+ 次修复失败: 质疑架构(见第四阶段第 5 步)
注意这些引导:
当你看到这些时: 停止。回到第一阶段。
| 借口 | 现实 | |------|------| | "问题很简单,不需要流程" | 简单问题也有根因。流程对简单 bug 来说也很快。 | | "紧急情况,没时间走流程" | 系统化调试比猜测试错快。 | | "先试试这个,然后再调查" | 第一次修复就定下了模式。从一开始就做对。 | | "我确认修复有效后再写测试" | 未测试的修复不持久。先测试才能证明。 | | "同时修复多个问题节省时间" | 无法隔离什么起了作用。会制造新 bug。 | | "参考资料太长,我会调整模式" | 部分理解保证出 bug。完整阅读。 | | "我看到问题了,让我修复它" | 看到症状 ≠ 理解根因。 | | "再试一次修复"(在 2+ 次失败后) | 3+ 次失败 = 架构问题。质疑模式,不要再次修复。 |
| 阶段 | 关键活动 | 成功标准 | |------|---------|---------| | 1. 根因 | 阅读错误、复现、检查变更、收集证据 | 理解 WHAT 和 WHY | | 2. 模式 | 寻找正常示例、对比 | 识别差异 | | 3. 假设 | 形成理论、最小化测试 | 确认或形成新假设 | | 4. 实施 | 创建测试、修复、验证 | Bug 解决,测试通过 |
如果系统调查揭示问题确实是环境性的、时间依赖性的或外部性的:
但是: 95% 的"无根因"案例都是调查不完整。
这些技术是系统化调试的一部分,可在本目录中找到:
root-cause-tracing.md —— 反向追踪调用栈以找到原始触发点defense-in-depth.md —— 找到根因后在多层添加验证condition-based-waiting.md —— 用条件轮询替换任意超时相关技能:
test-driven-development —— 用于创建失败测试用例(第四阶段,第 1 步)verification-before-completion —— 在声称成功之前验证修复是否有效来自调试会话的数据:
data-ai
Sync delta specs from a change to main specs. Use when the user wants to update main specs with changes from a delta spec, without archiving the change.
development
Create new agent skills with proper structure, progressive disclosure, and bundled resources. Use when user wants to create, write, or build a new skill.
development
Test-driven development with red-green-refactor loop. Use when user wants to build features or fix bugs using TDD, mentions "red-green-refactor", wants integration tests, or asks for test-first development.
development
Simplifies code for clarity without changing behavior. Use for readability, maintainability, and complexity reduction after behavior is understood.