code-problem-analyzer

深度代码问题分析与根因定位。用于分析代码行为异常、执行流程问题、配置错误等技术问题。当用户需要:1) 分析代码执行流程找到问题根因,2) 理解复杂代码逻辑和调用链,3) 定位异常行为的原因,4) 排查配置或状态问题。使用触发词:问题定位、分析问题、问题分析、代码分析、根因分析。

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "code-problem-analyzer" with this command: npx skills add openharmonyinsight/openharmony-skills/openharmonyinsight-openharmony-skills-code-problem-analyzer

Code Problem Analyzer

使用前提

使用此 skill 时,用户必须提供以下信息:

必需信息

  1. 问题背景

    • 预期行为:应该发生什么
    • 实际现象:实际发生了什么
  2. 问题相关信息

    • 相关日志(如果有的话)
    • 执行的命令
    • 崩溃栈或错误信息
    • 配置信息(如果相关)

分析流程

步骤1:理解问题

  1. 仔细阅读问题背景,明确预期行为和实际现象的差异
  2. 识别关键信息:命令、日志、错误信息、配置相关项
  3. 确定分析重点:是执行流程问题、状态问题、还是配置问题

步骤2:代码探索

根据问题类型,使用以下策略探索代码:

执行流程问题

  • 从用户命令或入口点开始追踪
  • 使用 grep 搜索关键函数、参数、标志位
  • 使用 read 阅读关键文件,理解调用链
  • 追踪关键变量的传递和修改

状态管理问题

  • 搜索状态相关的变量和函数(如 isDebugAppisStartWithDebug
  • 查找状态设置和读取的位置
  • 分析状态的生命周期和清理逻辑

配置问题

  • 查找配置相关的代码(如 GetBoolParamGetApplicationInfo
  • 分析配置的来源和优先级
  • 检查配置的缓存和更新机制

步骤3:构建流程图

在分析过程中,构建清晰的执行流程:

入口点 → 函数A → 函数B → 关键决策点 → 结果

对于每个关键点,记录:

  • 文件路径和行号
  • 函数名和关键代码片段
  • 状态变化或条件判断

步骤4:识别可能的根因

根据流程分析,列出所有可能导致问题的原因:

  1. 代码逻辑错误:条件判断、循环、状态转换等
  2. 状态管理问题:状态未正确初始化、清理或同步
  3. 配置问题:配置来源错误、优先级混乱、缓存失效
  4. 时序问题:异步操作、竞态条件、回调顺序
  5. 边界条件:空指针、越界、未处理的异常情况

步骤5:确定最可能的根因

根据以下标准排序可能的原因:

  1. 证据强度:有多少代码和日志支持这个假设
  2. 逻辑合理性:这个原因是否能解释所有观察到的现象
  3. 发生概率:这类问题在实际开发中是否常见
  4. 影响范围:这个原因是否涉及用户提到的所有关键点

步骤6:需要用户确认时暂停

如果存在以下情况,使用 question 工具暂停并询问用户:

  1. 多个可能根因:无法确定唯一根因时时
  2. 缺少关键信息:需要更多日志或配置信息
  3. 需要验证假设:需要用户测试或检查特定条件

询问示例:

question:
  questions:
    - question: "我发现了两个可能的原因:[原因1] 和 [原因2]。为了进一步确认,请提供:"
      header: "需要更多信息"
      options:
        - label: "检查配置文件"
          description: "查看应用配置文件中的 debug 字段值"
        - label: "查看完整日志"
          description: "提供应用启动的完整日志"
        - label: "检查等待调试列表"
          description: "运行 aa appdebug get 命令查看等待调试状态"

输出格式

标准输出

## 问题分析结果

### 所有可能的流程

1. **流程1**: [流程描述]
   - 文件:file.cpp:行号 - [关键代码片段]
   - 文件:file.cpp:行号 - [关键代码片段]
   - ...

2. **流程2**: [流程描述]
   - 文件:file.cpp:行号 - [关键代码片段]
   - ...

### 最有可能的根因

**根因**: [明确的根因描述]

**原因解释**:
- [解释1]
- [解释2]
- [关键代码位置]: file.cpp:行号

**建议的解决方案**:
1. [解决方案1]
2. [解决方案2]

### 需要进一步确认

[如果需要,说明需要用户做什么]

简洁输出(如果如果问题明确)

## 问题分析结果

### 最有可能的根因

**根因**: [明确的根因描述]

**原因**: [简短解释]

**关键代码位置**: file.cpp:行号

**解决方案**: [具体操作步骤]

最佳实践

代码搜索策略

  1. 从关键参数开始:如果用户提到某个参数或标志,先搜索它
  2. 追踪调用链:从入口点开始,逐层深入
  3. 关注状态变化:查找状态变量的设置、读取、修改位置
  4. 查找条件判断:条件分支通常是问题的关键点

阅读代码技巧

  1. 先读函数签名和注释:理解函数的输入输出和目的
  2. 关注关键逻辑:条件判断、循环、状态转换
  3. 追踪数据流:变量如何传递和修改
  4. 理解上下文:函数在什么场景下被调用

构建流程图

  1. 从用户命令开始:这是最明确的入口点
  2. 标记关键决策点:条件判断、状态检查
  3. 记录状态变化:变量值如何改变
  4. 标注文件位置:每个步骤都标明文件和行号

验证假设

  1. 检查所有观察到的现象:假设是否能解释所有现象
  2. 寻找反例:是否有证据与假设矛盾
  3. 考虑边界情况:假设在特殊情况下是否成立
  4. 评估影响范围:假设是否涉及用户提到的所有关键点

常见问题模式

状态管理问题

  • 状态未初始化就使用
  • 状态更新后未同步到相关组件
  • 状态清理不彻底导致残留
  • 多个地方修改同一状态导致不一致

配置问题

  • 配置来源不明确(命令行参数 vs 配置文件 vs 默认值)
  • 配置优先级混乱
  • 配置缓存未及时更新
  • 配置验证缺失

时序问题

  • 异步操作未正确等待
  • 回调函数执行顺序不符合预期
  • 事件触发时机错误
  • 资源释放时机不当

参考资料

如需更详细的分析方法论,请参阅:

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

ai-generated-business-code-review

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

ai-generated-ut-code-review

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

oh-pdd-code-generator

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

code-checker

No summary provided by upstream source.

Repository SourceNeeds Review