Skills: 调试技能
最后更新:2026-08-31
调试是开发中最耗时的环节——Skill 把调试经验固化,让每次排错都有章可循。
1. 调试 Skill 类型
(1) 错误诊断
从错误信息定位根因:
YAML
---
name: error-diagnoser
description: "从错误信息诊断根因"
triggers:
- keyword: "报错|error|异常|bug"
tools:
- Read
- Grep
- Glob
- Bash
---
(2) 性能分析
定位性能瓶颈:
| 分析维度 | 工具/方法 | 输出 |
|---|---|---|
| CPU 热点 | profiler 输出 | 函数耗时排名 |
| 内存泄漏 | 内存快照对比 | 泄漏对象定位 |
| 慢查询 | SQL 日志分析 | 慢查询清单 |
| 启动时间 | 时间戳打点 | 耗时阶段分布 |
(3) 日志分析
从日志中提取关键线索:
MARKDOWN
## 日志分析流程
1. Read 日志文件
2. Grep 搜索 ERROR/WARN 关键字
3. 提取异常堆栈和时间线
4. 关联同一请求的日志条目
5. 输出分析报告
2. 系统化调试流程
(1) 四阶段调试法
TEXT
📖 仅展示
调试四阶段
├── 1. 复现
│ ├── 确认错误可复现
│ ├── 记录复现步骤
│ └── 缩小复现条件
├── 2. 定位
│ ├── 读取错误堆栈
│ ├── 搜索相关代码
│ └── 确认问题位置
├── 3. 修复
│ ├── 分析根因
│ ├── 编写修复代码
│ └── 添加防御性检查
└── 4. 验证
├── 复现场景通过
├── 运行全量测试
└── 确认无回归
(2) 二分法定位
MARKDOWN
## 二分法调试
1. 确认问题存在的版本范围
2. Bash: git bisect start
3. 逐步缩小范围到具体提交
4. Read 该提交的 diff
5. 定位引入问题的具体代码行
(3) 假设驱动的调试
MARKDOWN
## 假设验证法
1. 列出可能的原因假设(最多 3 个)
2. 对每个假设设计验证方法
3. 按可能性从高到低验证
4. 验证通过 → 确认根因
5. 验证失败 → 排除假设,重新分析
3. 常见错误模式
(1) 错误模式速查
| 错误类型 | 典型特征 | 排查方向 |
|---|---|---|
| 空指针 | NoneType/null/undefined |
检查变量赋值链路 |
| 类型错误 | TypeError/ClassCastException |
检查类型转换和断言 |
| 并发问题 | 间歇性失败 | 检查共享状态和锁 |
| 边界条件 | 特定输入才出错 | 检查空值、零值、极端值 |
| 环境差异 | 本地正常线上出错 | 检查配置、依赖版本 |
| 时序问题 | 顺序相关 | 检查异步操作和事件顺序 |
(2) 错误信息解读
TEXT
📖 仅展示
错误堆栈阅读顺序:
1. 最后一行:错误类型和消息(最关键)
2. 倒数 2-3 行:你的代码中的调用点
3. 更上层的堆栈:框架/库的调用链
4. 第一个非框架行:问题的真正触发点
4. 调试 Skill 实战
▶ 示例:智能诊断 Skill
Alice 创建了一个自动诊断错误的 Skill:
YAML
---
name: smart-debug
description: "系统化调试:复现→定位→修复→验证"
tools:
- Read
- Grep
- Glob
- Bash
- Edit
---
MARKDOWN
## 调试流程
1. 读取错误信息和堆栈
2. Grep 搜索错误消息在代码中的位置
3. Read 相关代码,分析可能原因
4. 列出 3 个假设并逐一验证
5. 确认根因后 Edit 修复
6. Bash 运行测试验证
Bob 说:"调试最怕的是'试一试'——改了不知道为什么有效,下次还犯。Skill 强制你走假设→验证的流程,每步都有理有据。"
❓ 常见问题
Q AI 调试比人工快吗?
A 对模式化错误(空指针、类型错误、常见异常)快很多。对复杂的业务逻辑问题,AI 能缩小范围但最终定位仍需人工。
Q 如何避免 AI 给出错误的调试方向?
A 要求 AI 列出假设并逐一验证,而不是直接跳到结论。验证每一步的推理链条。
Q 调试 Skill 需要编辑权限吗?
A 诊断阶段只需要只读权限。修复阶段才需要 Edit。建议分成两个 Skill:诊断(只读)+ 修复(读写)。
📖 小节
- 三类调试 Skill:错误诊断、性能分析、日志分析
- 四阶段流程:复现 → 定位 → 修复 → 验证
- 定位方法:堆栈分析、二分法、假设验证法
- 核心原则:先理解再动手,假设驱动而非盲目试错
📝 作业
- 基础题(难度⭐):创建一个错误诊断 Skill,能从错误堆栈自动定位到代码位置。
- 进阶题(难度⭐⭐):创建一个系统化调试 Skill,实现四阶段调试法,包含假设验证环节。
- 挑战题(难度⭐⭐⭐):创建一个性能分析 Skill,能从 profiler 输出中定位瓶颈,给出优化建议和预估收益。