SuperAPI AI 工具集

systematic-debugging

编程与开发

查看项目

更新于 10-15 08:05

技能介绍

用途

Systematic Debugging 用于处理任何技术问题,包括测试失败、生产环境 bug、异常行为、性能问题以及构建失败。它的定位是在提出修复方案之前使用,避免随机修补浪费时间并引入新的 bug。

核心原则

该技能的核心原则是:在尝试修复之前,始终先找到根本原因。只修复症状被视为失败。违反流程的字面要求,就等于违反调试的精神。

其“铁律”为:没有先进行根因调查,就不允许修复。如果尚未完成第一阶段,就不能提出修复方案。

四个阶段

第一阶段:根因调查

在尝试任何修复之前:

  • 仔细阅读错误信息,它们往往包含确切的解决方案
  • 稳定复现问题,确认能否可靠触发
  • 检查最近的变更,找出可能导致问题的改动
  • 收集证据,在多组件系统中添加诊断性插桩
  • 追踪数据流,参见 root-cause-tracing.md

第二阶段:模式分析

  • 寻找可工作的示例,定位类似的可运行代码
  • 对照参考实现,完整阅读参考实现
  • 识别差异,列出每一处差异,无论多小
  • 理解依赖关系,包括设置、配置和环境

第三阶段:假设与测试

  • 形成单一假设,例如“我认为 X 是根本原因,因为 Y”
  • 进行最小化测试,一次只改变一个变量
  • 在继续之前验证,确认是否有效;如果无效,则提出新的假设
  • 当你不理解时,直接说“我不理解 X”

第四阶段:实施

  • 创建失败的测试用例,使用 test-driven-development 技能
  • 实施单一修复,一次只做一个改动
  • 验证修复,确认测试通过且没有破坏其他测试
  • 如果 3 次以上修复失败,则质疑架构

危险信号:停止并遵循流程

以下情况出现时,意味着必须停止并回到第一阶段:

  • “先快速修复,之后再调查”
  • “先试试改 X,看看行不行”
  • “我不完全理解,但这可能有用”
  • 在追踪数据流之前就提出解决方案
  • “再试一次修复”(当已经尝试 2 次以上时)

常见借口与事实

  • 借口“问题很简单”,事实是简单问题也有根本原因。
  • 借口“紧急情况,没时间”,事实是系统化调试比反复折腾更快。
  • 借口“先试试这个”,事实是第一次修复会设定模式,应当做对。
  • 借口“我看到问题了”,事实是看到症状不等于理解根本原因。

支持技术

  • root-cause-tracing.md:通过调用栈向后追踪 bug
  • defense-in-depth.md:在多个层面添加验证

适用场景与限制

该技能适用于任何技术问题的调试场景,尤其强调在提出修复前使用。资料中未提供关于收费、价格、平台支持范围或具体安装步骤的信息,暂未提供。