Use when debugging kernel, LTP, QEMU, runner, rootfs, or architecture-specific failures, especially large or mixed failure sets. Guides progressive failure indexing, small-batch root-cause iteration, failure-set diffing, and correct write-back.
Install
npx skillscat add soleca794/os-learning-2026/debug-principles Install via the SkillsCat registry.
SKILL.md
Debug Principles(渐进式调试方法论)
核心:先建浅层失败索引,再小批量归因,用失败集 diff 验证,周期性重聚类。 早期分组是暂定签名,不是根因真相。
1. 失败范围分级
| 范围 | 特征 | 策略 |
|---|---|---|
| 窄失败 | 单测例、单 panic、单 errno 路径 | 直接调试,不建索引(除非证据开始扩散) |
| 批量失败 | 若干测例或一个共享签名 | 建轻量索引,选 1-3 个代表用例调试 |
| 战役失败 | 大范围 LTP 回落、长日志、混合架构、反复无效修复 | 建私有调试归档,跑完整渐进循环 |
2. 渐进式循环
- 收集输入证据:优先用户指定路径;检查测试日志、panic/assert 位置、超时消息、返回码。LTP 问题先读测例源码和 helper,不要凭测例名猜测。
- 建浅层失败索引:按可观察签名分类(panic 位置、errno、失败的 syscall、模块、超时、日志关键词、架构、调用路径)。标记为暂定签名,第一轮不做全量根因分析。
- 选小批代表:从相同/相邻签名中选 1-3 个。优先选日志清晰、分数影响大、环境噪音小、子系统重叠强的用例。说明为什么这些代表、什么结果会合并/拆分/推翻当前分组。
- 向不变量调试,而不是向测例调试:
- 先从源码/可靠参考确认期望的 Linux/POSIX/LTP 行为。
- 形成带证伪条件的根因假设。
- 识别被违反的不变量、ABI 规则、状态所有权规则、锁/生命周期规则。
- 提出修复该规则的最小改动——目标不是让单个用例通过。
- 证据仍间接时,要求最小额外日志/追踪/定向重跑,不要夸大确定性。
- 验证并记录失败集 diff:重跑代表用例 + 最小相关回归集,记录什么消失、什么保留、什么新增失败。多个不同观感的失败一起消失 → 向后合并失败族;只有单个用例通过且无法解释相邻用例 → 可能是 case hacking,回到第 4 步复查不变量。
- 周期性重聚类:几个修复后或失败数显著下降后,重扫剩余失败并更新分组。旧分组只在解释修正时保留为历史。
3. 证据边界
- 原始日志、临时索引、暂定假设、探索性笔记:放用户私有调试目录,需要存活时保留,不进公共文档。
- 公共文档只收:稳定结论、验证结果、已接受限制、仍活跃的缺陷。
- 私有归档结构(仅当有用时):
<user-private-debug-dir>/<YYYY-MM-DD-slug>/
README.md # 状态、输入日志、当前签名、主导假设、证伪条件、下一步验证、计划回写
failure-index.md # 批量/战役失败时可选
logs/ # 原始或裁剪日志4. 输出纪律
- 严格区分:症状 / 失败签名 / 假设 / 已证实根因 / 修复 / 验证。
- 假设保持暂定,直到证伪证据闭合它。
- 说明剩余风险与下一个最小验证步骤。
- 保留无关的工作区改动和无关失败,不混入结论。
- 公共文档不默认贴原始日志;提炼决定性几行,注明证据日期与验证是 agent-run / user-run / not-run。