狠狠躁夜夜躁人人爽野战天天你的位置:最近2019中文字幕在线高清 > 狠狠躁夜夜躁人人爽野战天天 > OpenHarmony源码瓦解之DFX子系统
OpenHarmony源码瓦解之DFX子系统

发布日期:2022-06-18 17:01    点击次数:109

  

OpenHarmony源码瓦解之DFX子系统

想了解更多推行,请拜谒:

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架构图 OpenHarmony 源码瓦解之DFX子系统-步调系统接口使用讲明-鸿蒙HarmonyOS技能社区

注:本文只先容DFX各组件的使用,后续会有著述单独分析各组件的源码。

2 Hilog

HiLog是日记系统,提供给系统框架、行状、以及专揽打印日记,记载用户操作、系统动手情景等。

用户态Process通过日记接口将日记推行写入hilogd buffer中,用户态的hilog用具维持将日记输出到放胆台(console)进行检察,同期也维持通过hilog用具给hilogd发送敕令将日记落盘,成立指定日记类型缓冲区的大小等。

HiLog架构图如下:

注:当今代码暂未看到有维持读取kernel日记。

代码结构:

/base/hiviewdfx/hilog ├── frameworks           # 框架代码 │   └── native          # HiLog native兑当代码 ├── interfaces           # 接口 │   └── native          # 对外C/C++接口 │       └── innerkits   # 对里好看系统清晰的头文献 │       └── kits        # 对专揽清晰的头文献 ├── services │   └── hilogd          # 日记常驻服求兑现 │   └── hilogtool       # 日记用具兑现 

从使用者的角度,只需要怜惜hilog日记接口和hilog敕令行用具的使用方法。

2.1 hilog接口使用讲明

2.1.1 主要API讲明

OpenHarmony 源码瓦解之DFX子系统-步调系统接口使用讲明-鸿蒙HarmonyOS技能社区

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 HiSysEvent

hisysevent组件界说了HiSysEvent埋点接供词专揽框架、系统行状使用,用于向hiview上报系统事件信息。通过在要津旅途埋点记载系统在动手过程中的紧迫信息,扶持开辟者定位问题。

OpenHarmony 源码瓦解之DFX子系统-步调系统接口使用讲明-鸿蒙HarmonyOS技能社区 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是一个跨平台的末端栽种维测行状集。当今开源部分仅包含插件贬责平台和系统事件源。

架构图如下:

OpenHarmony 源码瓦解之DFX子系统-步调系统接口使用讲明-鸿蒙HarmonyOS技能社区

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 FaultLoggerd

faultloggerd是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 HiAppEvent

HiAppEvent为JS专揽提供事件打点接口,用于匡助专揽记载在动手过程中发生的故障信息、统计信息、安全信息、用户举止信息,以撑持开辟者分析专揽的动手情况。

OpenHarmony 源码瓦解之DFX子系统-步调系统接口使用讲明-鸿蒙HarmonyOS技能社区 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形态看成异步回调。

输入参数讲明:

eventName:事件称呼。 eventType:事件类型。 keyValues:事件参数键值对,为Json对象类型。 callback:回调函数,不错在回调函数中处理接口复返值。复返值为0示意事件参数校验生效,事件频频异步写入事件文献;大于0示意事件存在很是参数,事件在忽略很是参数后再异步写入事件文献;小于0示意事件校验失败,不践诺事件异步打点操作。

6.1.2 打点建树接口

function configure(config: ConfigOption): boolean;专揽事件打点建树方法,不错对打点功能进行自界说建树。

参数config:专揽事件打点建树项。

复返值: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

想了解更多推行,请拜谒:

51CTO和华为官方融合共建的鸿蒙技能社区

https://harmonyos.51cto.com

 



Powered by 最近2019中文字幕在线高清 @2013-2022 RSS地图 HTML地图