HiChecker是OpenHarmony提供的用于检测代码错误使用方式和运行结果的一种检测框架,可在应用和系统开发阶段用于运行时的缺陷扫描。本章节内容适用于标准系统。
开发指导
场景介绍
HiChecker的主要作用是给基于OpenHarmony的应用(包含系统和三方应用)开发者提供一套检测工具,用来检测应用程序开发过程中容易被人忽略的部分问题,包括应用关键线程调用耗时函数、应用进程中事件出现分发、执行超时以及应用进程中元能力资源泄露等,检测到的问题以日志记录或进程崩溃等形式展现出来以便开发者发现并修改相关问题。
接口说明
HiChecker提供的主要接口及功能如下:
表1 HiChecker函数接口
类 | 方法(包括返回值、方法名、参数列表) | 描述 |
---|---|---|
HiChecker | uint_64_t RULE_CAUTION_PRINT_LOG = 1<<63; | 告警规则,当有告警时记录日志。 |
uint_64_t RULE_CAUTION_TRIGGER_CRASH = 1<<62; | 告警规则,当有告警时让应用退出。 | |
uint_64_t RULE_THREAD_CHECK_SLOW_PROCESS = 1; | 检测规则,检测是否有耗时函数被调用。 | |
uint_64_t RULE_CHECK_SLOW_EVENT = 1<<32; | 检测规则,检测有事件分发或处理超过规定的时间阈值。 | |
uint_64_t RULE_CHECK_ABILITY_CONNECTION_LEAK = 1<<33; | 检测规则,检测ability泄露。 | |
AddRule(uint_64_t rule) : void | 添加一条或者多条规则到系统,系统根据添加的规则进行检测或反馈。 | |
RemoveRule(uint_64_t rule) : void | 删除一组规则,删除的规则后续将不再生效。 | |
GetRule() : uint_64_t | 获取当前线程规则、进程规则、告警规则的合集。 | |
Contains(uint_64_t rule) : bool | 当前已添加的规则集中是否包含了某一个特定的规则, 如果传入的rule是线程级别的rule,仅查询当前线程中是否包含。 | |
NotifySlowProcess(std::string tag) : void | 通知有慢处理,通知系统当前代码调用了耗时较长的慢处理流程,以告知应用重要线程中尽量避开直接调用。 | |
NotifySlowEvent(std::string tag) : void | 通知发生事件分发超时或执行超时。 | |
NotifyAbilityConnectionLeak(Caution caution) : void | 通知发生AbilityConnection泄露。 | |
Caution | GetTriggerRule() : uint_64_t | 获取触发当前告警的检测规则。 |
GetCautionMsg() : std::string | 获取更多辅助信息。 | |
GetStackTrace() : std::string | 获取告警触发时的堆栈信息。 |
开发实例
C++使用示例
-
在使用hichecker功能相关的代码文件中,包含hichecker头文件:
#include "hichecker.h"
如果非DFX子系统,需要加上HiviewDFX域。
using namespace OHOS::HiviewDFX;
通过静态调用使用相关接口。
HiChecker::AddRule(Rule::RULE_THREAD_CHECK_SLOW_PROCESS); //添加一条规则 HiChecker::AddRule(Rule::RULE_CHECK_SLOW_EVENT | Rule::RULE_CAUTION_PRINT_LOG); //添加多条规则 HiChecker::Contains(Rule::RULE_CAUTION_PRINT_LOG); // true HiChecker::GetRule(); //RULE_THREAD_CHECK_SLOW_PROCESS | RULE_CHECK_SLOW_EVENT | RULE_CAUTION_PRINT_LOG
当规则被触发时,根据添加的告警规则执行告警(默认为写日志)。
-
RULE_CAUTION_PRINT_LOG 日志输出触发告警的规则、线程ID、线程名、堆栈等信息。
-
RULE_CAUTION_TRIGGER_CRASH 进程直接退出,日志输出退出提示以及辅助信息。
通知接口的使用:
-
NotifySlowProcess(std::string tag) 通知系统当前代码调用了耗时较长的慢处理流程,入参示例:
“threadId:xx,threadName:xx,actualTime:xx,delayTime:xx“
-
NotifySlowEvent(std::string tag) 通知发生事件分发超时或执行超时,入参示例:
“threadId:xx,threadName:xx,eventName:xx,actualTime:xx,delayTime:xx“
-
NotifyAbilityConnectionLeak(Caution caution) 通知发生AbilityConnection泄露,入参示例:传入一个Caution实例。
Caution caution(Rule::RULE_CHECK_ABILITY_CONNECTION_LEAK , cautionMessage, stackTrace) // cautionMessage与其它通知接口类似 // stackTrace为发生泄露时的堆栈信息
-
-
编译设置,在引入hichecker相关模块的BUILD.gn里增加子系统依赖:
include_dirs = [ "//base/hiviewdfx/interfaces/innerkits/libhichecker/include" ] external_deps = [ "hichecker_native:libhichecker" ]
最后
有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习是非常有必要的。
这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。
希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!
如果你是一名有经验的资深Android移动开发、Java开发、前端开发、对鸿蒙感兴趣以及转行人员,可以直接领取这份资料
获取这份完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料
鸿蒙(HarmonyOS NEXT)最新学习路线
-
HarmonOS基础技能
- HarmonOS就业必备技能
- HarmonOS多媒体技术
- 鸿蒙NaPi组件进阶
- HarmonOS高级技能
- 初识HarmonOS内核
- 实战就业级设备开发
有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)与鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。
获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料
《鸿蒙 (OpenHarmony)开发入门教学视频》
《鸿蒙生态应用开发V2.0白皮书》
《鸿蒙 (OpenHarmony)开发基础到实战手册》
OpenHarmony北向、南向开发环境搭建
《鸿蒙开发基础》
- ArkTS语言
- 安装DevEco Studio
- 运用你的第一个ArkTS应用
- ArkUI声明式UI开发
- .……
《鸿蒙开发进阶》
- Stage模型入门
- 网络管理
- 数据管理
- 电话服务
- 分布式应用开发
- 通知与窗口管理
- 多媒体技术
- 安全技能
- 任务管理
- WebGL
- 国际化开发
- 应用测试
- DFX面向未来设计
- 鸿蒙系统移植和裁剪定制
- ……
《鸿蒙进阶实战》
- ArkTS实践
- UIAbility应用
- 网络案例
- ……
获取以上完整鸿蒙HarmonyOS学习资料,请点击→纯血版全套鸿蒙HarmonyOS学习资料
总结
总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,他们才能在这个变革的时代中立于不败之地。