
念念了解更多本体,请造访:
51CTO和华为官方联接共建的鸿蒙技巧社区
https://harmonyos.51cto.com
1 DFX简介DFX(Design for X)子系统是为了种植软件质料盘算推算的用具集,现在包含的本体主要有:DFR(Design for Reliability,可靠性)和DFT(Design for Testability,可测试性)特色。
现在口头系统已完了以下功能:
HiLog:活水日记。
HiSysEvent:系统事件纪录接口。
HiView:插件平台。
FaultLoggerd:运用故障订阅和汇集。
HiAppEvent: js运用事件纪录接口。
1.1 OpenHarmony架构图
注:本文只先容DFX各组件的使用,后续会有著述单独分析各组件的源码。
2 HilogHiLog是日记系统,提供给系统框架、功绩、以及运用打印日记,纪拜托户操作、系统开动景况等。
用户态Process通过日记接口将日记本体写入hilogd buffer中,用户态的hilog用具支握将日记输出到截至台(console)进行查抄,同期也支握通过hilog用具给hilogd发送号召将日记落盘,确立指定日记类型缓冲区的大小等。
HiLog架构图如下:

注:现在代码暂未看到有支握读取kernel日记。
怎么开设网上博彩代码结构:
/base/hiviewdfx/hilog 6868龙虎斗├── frameworks # 框架代码 │ └── native # HiLog native完了代码 ├── interfaces # 接口 │ └── native # 对外C/C++接口 │ └── innerkits # 对里好看系统线路的头文献 │ └── kits # 对运用线路的头文献 ├── services │ └── hilogd # 日记常驻服求完了 │ └── hilogtool # 日记用具完了
从使用者的角度,只需要关怀hilog日记接口和hilog号召行用具的使用口头。
2.1 hilog接口使用诠释2.1.1 主要API诠释
体育官方入口
2.1.2 使用口头
在模块BUILD.gn文献中添加依赖
external_deps = [ "hilog_native:libhilog" ]include头文献"hilog/log.h" 接口调用
代码示例(以下代码从系统源码中选录)
#include <vector> +#include "hilog/log.h" #include "string_ex.h" #include "uri.h" using std::string; using std::regex; +using OHOS::HiviewDFX::HiLog; namespace OHOS { namespace { & -39,6 +41,7 & namespace { const size_t POS_INC_MORE = 2; const size_t POS_INC_AGAIN = 3; const regex SCHEME_REGEX("[a-zA-Z][a-zA-Z|\\d|+|-|.]*$"); + const HiviewDFX::HiLogLabel LABEL = {LOG_CORE, 0xD001800, "URI"}; }; // namespace Uri::Uri(const string& uriString) & -48,6 +51,7 & Uri::Uri(const string& uriString) port_ = NOT_CALCULATED; if (uriString.empty()) { + HiLog::Error(LABEL, "Input empty!"); return; }
2.2 hilog号召行用具使用诠释



注:落盘日记文献保存旅途为"/data/log/hilog/"。
3 HiSysEventhisysevent组件界说了HiSysEvent埋点接供词运用框架、系统功绩使用,用于向hiview上报系统事件信息。通过在关节旅途埋点纪录系统在开动过程中的热切信息,赞成开荒者定位问题。
3.1 接口诠释
/** * @brief 写系统事件 * @param domain 事件的domain * @param eventName 事件名 * @param type 事件类型 * @param keyValues 可变参数,键值对 * @return 0 得胜,其他失败 */ template<typename... Types> static int Write(const std::string &domain, const std::string &eventName, EventType type, Types... keyValues)
胪列类型EventType界说了事件类型
enum EventType { FAULT = 1, // system fault event STATISTIC = 2, // system statistic event SECURITY = 3, // system security event BEHAVIOR = 4 // system behavior event };
HiSysEvent里面类Domain中界说了一些字符串常量,用于暗示不同的domain
3.2 接口使用在BUILD.gn中增多依赖:
external_deps = [ "hisysevent_native:libhisysevent" ]
在类界说头文献能够类完了源文献中,包含HiSysEvent头文献:
#include "hisysevent.h"
示例:(以下代码摘自源码)
void EventReport::SendEvent(const EventInfo& eventInfo) { auto packageName = AceApplicationInfo::GetInstance().GetPackageName(); if (packageName.size() > MAX_PACKAGE_NAME_LENGTH) { StrTrim(packageName); } OHOS::HiviewDFX::HiSysEvent::Write(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, eventInfo.eventType, OHOS::HiviewDFX::HiSysEvent::EventType::FAULT, EVENT_KEY_ERROR_TYPE, eventInfo.errorType, EVENT_KEY_PACKAGE_NAME, packageName); }
hiview在收到音书后会打印日记,并把事件保存到
/data/log/LogService/sys_event_db/hisysevent.db 数据库中。
日记如下:
行 10430: 12-06 15:41:03.176 369 537 D 02d10/HiView-EventServer: Start: receive data from client <private> 行 10431: 12-06 15:41:03.176 369 537 D 02d10/HiView-SysEventSource: Parser: parser raw message size=301, {"domain_":"ACE","name_":"JS_ERROR","type_":1,"time_":1638805263175,"pid_":821,"tid_":839,"PACKAGE_NAME":"","REASON":"Js Crash","SUMMARY":"Lifetime: 0.000000s 行 10432: 12-06 15:41:03.176 369 537 D 02d10/HiView-SysEventSource: Js-Engine: Quick JS 行 10433: 12-06 15:41:03.176 369 537 D 02d10/HiView-SysEventSource: Stacktrace: TypeError: cannot read property 'getAppPageStartConfig' of undefined 行 10434: 12-06 15:41:03.176 369 537 D 02d10/HiView-SysEventSource: at onPageShow (pages/EntryView.js) 行 10435: 12-06 15:41:03.176 369 537 D 02d10/HiView-SysEventSource: at onPageShow (pages/EntryView.js) 行 10472: 12-06 15:41:03.180 369 537 I 02d10/HiView-SysEventSource: Parser: parser result domain_=ACE eventName_=JS_ERROR 行 10473: 12-06 15:41:03.180 369 537 D 02d10/HiView-EventSource: PublishPipelineEvent: EventSource PublishPipelineEvent 行 10474: 12-06 15:41:03.180 369 547 I 02d10/HiView-SysEventService: Convert2SysEvent: domain is ACE, eventName is JS_ERROR. 行 10485: 12-06 15:41:03.180 369 547 D 02d10/HiView-SysEventDao: Insert: insert db file /data/log/LogService/sys_event_db/hisysevent.db with JS_ERROR 行 10837: 12-06 15:41:03.232 369 547 I 02d10/HiView-DOCDB: open ejdb success 行 10838: 12-06 15:41:03.232 369 547 I 02d10/HiView-DOCDB: open doc store 行 11141: 12-06 15:41:03.249 369 547 D 02d10/HiView-DOCDB: put data to doc store success 行 11142: 12-06 15:41:03.250 369 547 D 02d10/HiView-SysEventDbMgr: SaveToStore: save sys event 1, JS_ERROR 行 11227: 12-06 15:41:03.253 369 547 I 02d10/Faultlogger: AddFaultLogIfNeed: Invalid module name 行 11229: 12-06 15:41:03.253 369 547 I 02d10/HiView-SysEventSource: Recycle: recycle resource
4 HiView
Hiview是一个跨平台的末端开荒维测功绩集。现在开源部分仅包含插件惩处平台和系统事件源。
架构图如下:
Hiview由框架和插件构成,主要包含以下几部分:
操作系统适配层(adapter),对使用的系统功绩的接口进行适配。 Hiview基础界说(hiview base),包括插件基类、管说念的界说,事件、事件部队界说以及一些用具类。 Hiview的中枢模块(hiview core),包括插件建立,插件惩处以及事件源。 Hiview功绩(hiview services),现在仅包括hiview开动信息dump功能。 Hiview插件(plugins),为独建功能的业务模块。 Hiview维测功绩是由事件驱动的,其中枢为漫步在系统各处的HiSysEvent桩点。时势化的事件通过HiSysEvent API上报至hiview进行处理,请参考第三节HiSysEvent的架构图。
1.运用框架、系统功绩使用HiSysEvent组件上报系统事件。
2.Hiview中SysEventSource得复书书,融会并拼装成管说念事件分发给插件处理。
注:hiview现在并未对外提供接口。
5 FaultLoggerdfaultloggerd是OpenHarmony中的C/C++开动时崩溃临时日记的生成及惩处模块。主要过程如下:
程度A调用接口订阅故障汇集功能。
程度A的相配信号处理器检测到相配信号后Fork出子程度开动processdump门径。
processdump门径Ptrace到父程度上,读取相配线程联系信息,包括寄存器以及调用栈。
processdump门径在读取相配信息后将其写入到/data/log/faultlog/temp目次下中作念临时存储。
接口使用口头:在模块的BUILD.gn文献中添加依赖
博彩评级公司网deps = ["//base/hiviewdfx/faultloggerd/interfaces/innerkits/signal_handler:dfx_signalhandler"]包含"dfx_signal_handler.h"头文献 调用DFX_InstallSignalHandler()口头订阅故障汇集功能。
示例:(以下代码摘自源码)
base/telephony/ril_adapter/hril_hdf/hril_hdf.c中
#include "hril_hdf.h" #include <pthread.h> #include "dfx_signal_handler.h" //................[1]头文献 #include "telephony_log_c.h" static int32_t RilAdapterInit(struct HdfDeviceObject *device) { if (device == NULL) { return HDF_ERR_INVALID_OBJECT; } DFX_InstallSignalHandler(); //................[2]订阅故障汇集功能 struct HdfSBuf *sbuf = HdfSBufTypedObtain(SBUF_IPC); if (sbuf == NULL) { TELEPHONY_LOGE("HdfSampleDriverBind, failed to obtain ipc sbuf"); return HDF_ERR_INVALID_OBJECT; } if (!HdfSbufWriteString(sbuf, "string")) { TELEPHONY_LOGE("HdfSampleDriverBind, failed to write string to ipc sbuf"); HdfSBufRecycle(sbuf); return HDF_FAILURE; } if (sbuf != NULL) { HdfSBufRecycle(sbuf); } TELEPHONY_LOGD("sbuf IPC obtain test success!"); LoadVendor(); return HDF_SUCCESS; }
注:门径崩溃后会在/data/log/faultlog/temp旅途下生成临时文献。系统开荒者不错通过日记定位崩溃问题。
6 HiAppEventHiAppEvent为JS运用提供事件打点接口,用于匡助运用纪录在开动过程中发生的故障信息、统计信息、安全信息、用户行径信息,以支撑开荒者分析运用的开动情况。
6.1 接口诠释
js接口界说文献:interface/sdk-js/api/phone/@ohos.hiAppEvent.d.ts
6.1.1 打点接口
JS 事件类型胪列——EventType
| 类型 | 态状|
| ----- | ----- |
| FAULT | 故障类型事件 |
| STATISTIC | 统计类型事件 |
| SECURITY | 安全类型事件 |
| BEHAVIOR | 行径类型事件 |
function write(eventName: string, eventType: EventType, keyValues: object): Promise; 运用事件异步打点口头,使用promise容貌行动异步回调。
function write(string eventName, EventType type, object keyValues,
AsyncCallback callback): void 运用事件异步打点口头,皇冠分红使用callback容貌行动异步回调。
皇冠网址皇冠客服飞机:@seo3687输入参数诠释:
eventName:事件称呼。 eventType:事件类型。 keyValues:事件参数键值对,为Json对象类型。 callback:回调函数,不错在回调函数中处理接口复返值。复返值为0暗示事件参数校验得胜,事件泛泛异步写入事件文献;大于0暗示事件存在相配参数,事件在忽略相配参数后再异步写入事件文献;小于0暗示事件校验失败,不扩充事件异步打点操作。6.1.2 打点建立接口
function configure(config: ConfigOption): boolean;运用事件打点建立口头,不错对打点功能进行自界说建立。
参数config:运用事件打点建立项。
皇冠体育hg86a
复返值:boolean,true暗示建立得胜,false暗示建立失败。
ConfigOption运用打点建立选项
| 建扬名 | 类型|必填 |诠释|
| ----- | ----- |----- | ----- |
| disable | boolean |否|运用打点功能开关,true暗示关闭打点功能,false暗示不关闭打点功能|
| maxStorage | string |否|打点数据土产货存储文献地点目次的配额大小,默许名额为“10M”。地点目次大小超出名额后会对目次进行算帐操作,会按从旧到新的限定一一删除打点数据文献,直到目次大小不超出名额时住手。|
6.2 接口使用引入模块:
import hiAppEvent from ‘@ohos.hiAppEvent’
运用事件打点:
callback容貌
hiAppEvent.write("testevent", hiAppEvent.EventType.BEHAVIOR, {"key":"value"}, (err, value) => { console.log(`HiAppEvent testevent callback`); if (err) { // 事件写入相配:事件存在相配参数能够事件校验失败不扩充写入 console.error(`HiAppEvent json-callback-error code=${err.code}`); } else { console.log(`HiAppEvent json-callback-success value=${value}`) } });
Promise容貌
hiAppEvent.write("test_event", hiAppEvent.EventType.FAULT, {"int_data":100, "str_data":"strValue"}) .then((value) => { // 事件写入泛泛 console.log(`success to write event: ${value}`); }).catch((err) => { // 事件写入相配:事件存在相配参数能够事件校验失败不扩充写入 console.error(`failed to write event because ${err.code}`); });
运用打点建立
建立运用事件打点功能开关
hiAppEvent.configure({ disable: true });
建立事件文献目次存储名额大小
hiAppEvent.configure({ maxStorage: '15M' });
7 回归
本文对口头系统现在已支握的DFX功能模块进行了先容。demo请下载附件。
皇冠官方旗舰店https://harmonyos.51cto.com/resource/1646
https://harmonyos.51cto.com/resource/1647
为什么要治水?怎样治水?如何低成本、可持续生态治水?《广州低碳生态治水实践》的主题培训中解答了上述三个问题。
事故发生后,自治区党委、政府主要领导同志和银川市主要负责同志第一时间赶赴现场指导救援工作,组织各方力量全力做好现场灭火、伤员救治、群众疏散、家属安抚等工作。6月21日21时20分许,明火被扑灭。同步组织公安、消防、卫健等专业力量,对烧烤店进行全面彻底搜寻,调派救护车18辆,急救人员70余人增援现场,将伤员及时送往医院,组织医疗专家救治团队全力以赴救治,协调宁夏医科大学附属医院骨干力量,成立抢救专班,每个专班负责一名伤员,让每一名伤员都得到最佳治疗和护理,千方百计挽救生命,让伤者早日康复。截至6月22日6时,事故已造成31人死亡,7人正在全力救治中、目前生命体征平稳。在现场救援中,我们加强现场处置和管理,紧急把烧烤店附近2栋住宅楼、4个单元64户居民疏散安置到周边酒店,指派专人做好情绪安抚工作,防止发生次生灾害。
念念了解更多本体,请造访:
51CTO和华为官方联接共建的鸿蒙技巧社区
https://harmonyos.51cto.com

