本原创文章帖发布在华为开发者联盟社区,欢迎开发者前往访问评论交流,更多与该内容相关讨论,请点击原帖查看:

鸿蒙应用问题定位定界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 能力做到更好。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐