系统化调试技能
当用户描述一个 bug 或异常行为时,按以下流程执行:
第一步:收集证据
- •让用户描述:预期行为 vs 实际行为
- •收集错误日志、堆栈跟踪、截图
- •确认复现条件(设备/操作步骤/频率)
- •用
grep_search在代码中搜索相关错误信息和关键字
第二步:缩小范围
- •根据错误信息定位到具体文件和函数
- •用
view_code_item阅读相关代码,理解调用链 - •画出调用链路:入口 → 中间层 → 出错点
- •识别可能的竞态条件、空值、类型错误
第三步:提出假设
- •列出 2-3 个最可能的根因假设
- •为每个假设说明:
- •为什么认为这是原因
- •如何验证/排除
- •按可能性排序
第四步:验证假设
- •添加日志语句验证假设(标记为
// DEBUG-TEMP) - •阅读相关测试文件,检查是否有覆盖
- •对比类似功能的正常实现(如果有)
- •如果项目有其他参考实现(如 nekobox),对比关键差异
第五步:实施修复
- •编写最小化修复(不要过度重构)
- •所有修改标注
// fix: [issue描述]注释 - •确保修复不引入新问题(检查调用方)
- •清理第四步添加的
// DEBUG-TEMP日志
第六步:验证修复
- •运行编译确认无语法错误
- •运行现有测试(如果有)
- •列出手动测试步骤让用户验证
- •检查边界情况和并发场景
注意事项
- •不要猜测:每一步都要基于代码证据
- •不要过度修复:只修改导致 bug 的代码,不要顺便重构
- •保留上下文:在 walkthrough 中记录发现和修复过程
- •Android 特别注意:多进程通信、生命周期、主线程阻塞