[ PROMPT_NODE_24690 ]
root-cause
[ SKILL_DOCUMENTATION ]
# 根本原因分析
用于寻找错误真实原因而非仅是症状的技术。
## 5 个为什么 (5 Whys) 方法
反复询问“为什么”,直到找到根本原因。
### 示例 1:API 错误
问题: API 返回 500 错误
为什么 1: 服务器抛出异常
-> 异常: "Cannot read property 'email' of null"
为什么 2: User 对象为 null
-> getUserById() 返回了 null
为什么 3: 数据库中不存在该用户 ID
-> ID 来自 session,用户已被删除
为什么 4: 用户删除操作未使 session 失效
-> 用户删除时没有清理 session
为什么 5: 原始需求中未考虑 session 管理
-> 原始规范中缺少该需求
根本原因: 用户删除实现不完整
修复: 在用户删除流程中添加 session 失效逻辑
### 示例 2:生产环境宕机
问题: 网站无法访问
为什么 1: 服务器无响应
-> 内存溢出
为什么 2: 内存泄漏
-> 事件监听器不断累积
为什么 3: 监听器未被清理
-> useEffect 缺少清理函数
为什么 4: 开发者不知道需要清理
-> 代码审查未发现此问题
为什么 5: 代码审查清单不包含 React 清理项
-> 清单已过时
根本原因: 缺少代码审查指南
修复: 更新清单 + 添加 ESLint 规则
## 错误类别与常见根本原因
### 类别:Null/Undefined 错误
| 症状 | 常见根本原因 |
|---------|-------------------|
| `undefined` 变量 | 缺少 return 语句 |
| API 返回 `null` | 资源未找到,未处理 |
| 缺少属性 | 对象模式 (schema) 已更改 |
| 数组索引未定义 | 差一错误 (Off-by-one error) |
### 类别:网络错误
| 症状 | 常见根本原因 |
|---------|-------------------|
| 连接被拒绝 | 服务未启动/已崩溃 |
| 超时 | 数据库缓慢, N+1 查询 |
| 401/403 | Token 过期, 凭据错误 |
| CORS | 缺少服务器响应头 |
### 类别:类型错误
| 症状 | 常见根本原因 |
|---------|-------------------|
| 不是一个函数 | 导入错误 (默认导入 vs 命名导入) |
| 无法迭代 | 预期数组,得到对象 |
| 无效 JSON | 返回了 HTML 错误页面 |
| 类型不匹配 | 表单数据是字符串,预期为数字 |
### 类别:状态错误
| 症状 | 常见根本原因 |
|---------|-------------------|
| 过时数据 | 缺少刷新,缓存问题 |
| 竞态条件 | 异步操作未同步 |
| 无限循环 | useEffect 依赖项错误 |
| 内存泄漏 | 事件监听器未清理 |
---
## 调试决策树
开始
|