鸿蒙应用问题定位定界DFX Skill升级了!八大技能全链路拆解等你来!
本原创文章帖发布在华为开发者联盟社区,欢迎开发者前往访问评论交流,更多与该内容相关讨论,请点击原帖查看:
从场景出发,一文选对分析技能
—————————————————————————————————————————————
你是否经历过这样的场景:「应用闪退了」,用户群里反馈「卡死了打不开」,线上监控告警「内存又涨上去了」——而手头只有一堆看不懂的日志文件,面对成千上万行内容无从下手?
DFX Skills 就是为了解决这个问题而生的。把日志交给 AI Agent,它会自动完成从日志解析到根因定位、修复建议的全链路工作。1.3.0 版本于 2026 年 9 月 1 日发布,在 1.2.0 七大故障分析技能基础上新增 perf-analysis 端到端性能分析技能,并首次引入 MCP 服务架构。
开源仓地址:developtools_dfx_skills:基于 OpenHarmony 的 DFX 问题定界定位技能项目 - AtomGit
▶ 一、整体定位:DFX Skills 是什么?

DFX Skills 是面向 HarmonyOS / OpenHarmony 的问题定界定位技能集合。它不是孤立脚本,而是为 AI Agent 框架量身打造的「工作流大脑」——每个技能由 SKILL.md(工作流)、scripts/(量化脚本)和 references/(故障模式库)三件套构成,让大语言模型在拿到日志后能像资深 DFX 工程师一样:先解析、再匹配、后归因,最终输出「三级根因 + 证据链 + 修复建议」。
仓库按问题类型分为三大板块:
| 技能集 | 覆盖范围 |
| 01-fault-analysis | 故障分析技能集,覆盖崩溃、卡死、内存泄漏、句柄泄漏、性能卡顿、端到端性能分析 |
| 02-fault-code-fix | 故障代码修复技能集(敬请期待) |
| 03-fault-static-check | 故障静态检查技能集,目前已落地 apifault-analysis |
▶ 二、八大分析技能:从场景到选型
下面从实际遇到的故障场景出发,帮你快速判断该用哪个技能,以及技能具体能做什么。

◆ 1. appfreeze-analysis —— 应用卡死、冻屏
用户反馈「点完按钮转半天没反应」、「列表滑着滑着就冻住了」、「输入框打字无响应」。你拿到了一份故障日志,里面出现了 APPFREEZE、THREAD_BLOCK 等关键字,但日志内容太多,不知道从哪里开始看。
推荐使用 appfreeze-analysis 技能。
这个技能专门处理应用无响应问题。它会先读取日志摘要,再按资源、队列、故障栈、Binder、附件分阶段加载,逐层排除整机低内存、高负载、热限频等系统级异常,最后聚焦到具体线程的阻塞原因。
■ 技能功能
• 自动解析故障日志,按区段加载(overview / resources / event-queue / fault-stack / other-threads / binder / attachments)
• 逐层排除系统级异常(整机低内存、高负载、热限频)
• 聚焦主线程或业务线程的 EventHandler 队列阻塞、等锁、Binder 链路问题
• [1.3.0 升级] 业务线程阻塞判定改为「同一线程 3s 与 6s 堆栈对比」,避免业务线程卡顿被主线程耗时栈误判
• [1.3.0 升级] 修复 BUSSINESS/BUSINESS 历史拼写兼容问题,旧日志也能正常解析
◆ 2. jscrash-analysis —— ArkTS / JS 层闪退
应用一启动就闪退,或者用户点某个按钮后白屏了。日志里报 TypeError、ReferenceError 之类的错误,还有一堆看不懂的堆栈信息。你想知道到底是哪行代码出了问题。
推荐使用 jscrash-analysis 技能。
这个技能专门分析 ArkTS/JS 层的崩溃日志。它按错误类型多级分类,匹配故障模式库的三级根因体系,定位到第一个应用栈帧并标注框架栈传播路径。即使缺少 SourceMap,也能基于原始堆栈进行分析。
■ 技能功能
• 按 Reason -> Error name -> Error message 多级分类,匹配故障模式库
• 定位第一个应用栈帧,标注框架栈传播路径
• SourceMap 缺失时仍可分析原始堆栈
• [1.3.0 升级] 新增 OOM 快照联动分析:当定性为 OutOfMemoryError 且用户提供了堆快照时,自动转交 jsleak-analysis 继续定位疑似泄漏对象,一次输入、两份报告
◆ 3. cppcrash-analysis —— Native C/C++ 崩溃
应用突然崩溃,日志里出现段错误、空指针或 libxxx.so 相关的调用栈。问题出在 Native 层,日志包含寄存器、内存、信号等信息,但光看堆栈很难判断是第一现场还是被调用方出的问题。
推荐使用 cppcrash-analysis 技能。
这个技能专门处理 Native 层崩溃。它按信号分类,分析崩溃地址,联合 Maps、寄存器、线程证据判断第一现场,对调用栈分层(崩溃帧、首个非运行时调用方、首个应用帧)。只在符号或二进制可用时才执行深挖。
■ 技能功能
• 按信号分类 -> 崩溃地址分析 -> Maps/寄存器/线程证据联合判断第一现场
• 调用栈分层:崩溃帧、首个非运行时调用方、首个应用帧
• 仅在符号/二进制可用时执行 llvm-addr2line、llvm-objdump 深挖
• [1.3.0 升级] 新增 HSP 加载失败识别、NAPI ProcessAll 回调崩溃定位、符号表反解状态门禁三项定界规则
• [1.3.0 升级] 责任领域对齐:系统侧根因只输出系统模块修改,应用侧只输出应用修改,混合责任分开输出
◆ 4. jsleak-analysis —— ArkTS/JS 内存泄漏
应用用着用着越来越卡,内存监控显示内存持续上涨。重启后正常,但过一段时间又涨上去了。你怀疑有内存泄漏,设备上也抓到了一份堆快照文件。
推荐使用 jsleak-analysis 技能。
这个技能专门分析 JS 层内存泄漏。它支持从 rawheap 转换到 heapsnapshot,再调用聚类工具分析,按保留大小检查 Detached DOM、全局引用、闭包、异常大对象等泄漏模式。
■ 技能功能
• rawheap -> heapsnapshot 格式转换
• heap_cluster 聚类分析,按 Retained Size 排序
• 检查 Detached DOM、全局引用/window/Cache、闭包持有 context、异常大对象
• 匹配 ROOT_VM/FRAME/LOCAL_HANDLE/GLOBAL_HANDLE 故障模式
• [1.3.0 重磅] 全图强引用最短路径查找:避免弱引用被误报为泄漏
• [1.3.0 升级] 单快照聚类新增 --top N 参数,自定义输出数量
• [1.3.0 重磅] rawheap + htrace + js_map 三合一日志入口:自动完成 HTrace 转 DB、快照聚类、Node ID 到 Native 地址映射
• [1.3.0 升级] 支持续跑,跳过已完成阶段
◆ 5. nativeleak-analysis —— Native 内存泄漏
内存持续上涨,但问题不在 JS 层。PSS 指标一直在涨,你不确定是 jemalloc 堆分配、ashmem 匿名内存、DMA buffer 还是 GPU 资源没释放。设备上有 sample 采样文件或 profiler 火焰图。
推荐使用 nativeleak-analysis 技能。
这个技能专门分析 Native 侧内存泄漏。它先识别文件类型,判断泄漏类型占比,PSS 泄漏时细分到 jemalloc/ArkTS/ashmem/anon 子类型,结合 profiler 火焰图定位热点函数。
■ 技能功能
• 自动识别 sample/smaps/profiler/kernel 文件类型
• 判断泄漏类型占比和内存变化趋势
• PSS 泄漏细分:jemalloc / ArkTS / ashmem / anon
• 结合 profiler 火焰图定位热点函数和调用路径
• DMA buffer / GPU 资源泄漏模板分析
• kernel 侧泄漏分析(DMA/GPU/ASHMEM/SLAB)
• [1.3.0 升级] trace_streamer 修正 HTrace 转 DB 数据解析,与 jsleak-analysis 三合一功能共享
◆ 6. fdleak-analysis —— 文件描述符 / 句柄泄漏
系统弹出 RESOURCE_OVERLIMIT 告警,或者后台进程的句柄数突然突破 20000。你怀疑有文件描述符没关闭,日志文件是 [pid]_fd_leak.txt 格式的。
推荐使用 fdleak-analysis 技能。
这个技能专门分析文件描述符和句柄泄漏。它提取故障头、句柄类型分布、目录分布,按五类专项(ashmem/socket/pipe/sync_file/dmabuf)还原申请栈。
■ 技能功能
• 提取故障头、句柄类型 Top、目录 Top
• 五类专项明细:ashmem / socket / pipe / sync_file / dmabuf
• 按 FdTrack 调用方向还原申请栈
• 严格区分当前句柄存量与 10 分钟全量申请统计,避免把已关闭 FD 的申请栈误判为泄漏
◆ 7. perf-analysis —— 端到端性能问题自动分析
用户说「列表滑动卡顿」、「应用启动慢」、「游戏掉帧」。你拿到一段 trace 文件或 perf 数据,但面对海量的性能数据不知从何看起。你只想知道:到底哪里慢了?
推荐使用 perf-analysis 技能。
这是 DFX Skills 首个基于 MCP 服务的技能,也是第一个面向性能问题的端到端分析能力。你只需要用一句自然语言描述问题,技能自动完成日志转换、Skill 路由、指标查询与根因推理,全程无需手动操作。
■ 技能功能
• 「环境就绪 -> 日志就绪 -> 根因分析」三步自动流程
• 自动探测 MCP 工具可用性,识别或引导抓取 trace/perf 日志
• 日志自动转为 SQLite,按问题描述自主路由到对应子 Skill
• 10 个子 Skill 覆盖:启动分析、丢帧分析、调度分析、频点分布、IO 分析、负载对比、游戏性能、渲染管线检测、hiperf 热点采样、通用即席探索
• [1.3.0 新增] 全程通过宿主 MCP 工具调用,禁止手写 SQL,避免遗漏框架自动注入的参数
• [1.3.0 新增] 内置 hitrace 与 hiperf 抓取指南,设备已连接时可现场采集
◆ 8. apifault-analysis —— API 调用失败、错误码不明
调用某个系统 API 时失败了,返回了一个错误码,但你不知道这个错误码是什么意思。日志里的 domain_id 对不上模块,调用栈里的 .so 文件也不知道归哪个团队管。
推荐使用 apifault-analysis 技能。
这是唯一的静态诊断技能,专门帮开发者定位 API 调用问题。它内置「环境发现 -> 线索提取与模块识别 -> 分诊查询 -> 深潜分析 -> 报告生成」流程,配合模块映射表和知识库,能自动识别错误码含义并定位责任模块。
■ 技能功能
• 环境发现:自动识别项目环境和可用资源
• 线索提取与模块识别:从日志中提取关键线索,匹配责任模块
• 分诊查询:基于 error_codes.json、api_chain.json、common_issues.md 知识库查询
• 深潜分析:低置信度时反向追踪源码、校验调用时序与权限声明
• 报告生成:输出结构化诊断报告
★ 三、1.3.0 版本核心主线:更准、更稳、不背锅、更全面
| 主线 | 关键能力 |
| 更准 | appfreeze 业务线程 3s/6s 栈对比、jsleak 强引用最短路径、cppcrash 符号表反解门禁,都为了减少误判、提升根因可信度 |
| 更稳 | cppcrash 责任领域对齐、appfreeze 修复建议严格匹配责任领域;jsleak 三合一续跑与路径修正让大文件分析不中断 |
| 不背锅 | cppcrash 明确「混合责任分开输出」、系统侧根因只输出系统模块修改,与应用开发者划清边界 |
| 更全面 | perf-analysis 端到端性能分析技能,基于 MCP 服务实现「环境就绪 -> 日志就绪 -> 根因分析」三步自动流程,覆盖启动、丢帧、调度、渲染管线、perf 热点等 10 个子 Skill |
▶ 四、上手指南:用一句话驱动分析
你不需要手动敲命令——只需把日志丢给 AI Agent,用一句自然语言描述问题,Agent 命中关键字后自动进入对应技能工作流,最终拿到 Markdown 报告。
示例(冻屏场景):
请使用 appfreeze-analysis skill,分析故障日志:appfreeze.log 和采样栈:sample_stacks.txt
★ 五、结语
DFX Skills 1.3.0 在 1.2.0 「更准、更稳、不背锅」的基础上,新增 perf-analysis 端到端性能分析技能,首次引入 MCP 服务架构,将覆盖范围从「故障分析」扩展到「性能分析」。如果你是 HarmonyOS 应用开发者或 DFX 工程师,这套技能能让你的故障工单处理时长从「小时级」压缩到「分钟级」,性能问题定位也能「一句话搞定」。
代码仓库已开源:developtools_dfx_skills:基于 OpenHarmony 的 DFX 问题定界定位技能项目 - AtomGit ,内含完整 SKILL.md 工作流、脚本工具与故障模式库,开箱即用。
欢迎提交 Issue 反馈误判、漏报或新故障模式,也欢迎提交 PR 补充知识库或改进脚本——让我们一起把鸿蒙生态的 DFX 能力做到更好。
更多推荐




所有评论(0)