鸿蒙OpenHarmony开发中的知识: DFX工具—HiDumper

185 篇文章 0 订阅
181 篇文章 1 订阅

简介

HiDumper是OpenHarmony中为开发、测试人员,IDE工具提供统一的系统信息获取工具,帮助使用者分析,定位问题。

HiDumper主要包括以下几个主要模块:

  • hidumper:可执行程序,工具入口,在板上可通过hidumper执行对应命令
  • hidumperclient:动态库,提供framework层接口
  • lib_dump_usage:动态库,提供framework层功能实现
  • hidumperservice:动态库,sa服务,提供service层功能实现

结构分析

.
├── BUILD.gn
├── bundle.json
├── client
│   └── native
│       ├── dump_client_main.cpp	
│       └── main.cpp				//可执行文件入口
├── figures
├── frameworks						//框架实现
│   └── native
│       ├── BUILD.gn
│       ├── common.h
│       ├── dump_controller.h
│       ├── dump_utils.cpp
│       ├── dump_utils.h
│       ├── include
│       └── src
├── hidumper.gni
├── interfaces
│   ├── innerkits
│   │   ├── BUILD.gn
│   │   ├── dump_usage.cpp
│   │   └── include
│   └── native
│       └── innerkits
├── LICENSE
├── OAT.xml
├── README.md
├── README_zh.md
├── sa_profile
├── services						//服务实现
│   ├── BUILD.gn
│   ├── hidumper.map
│   ├── native
│   │   ├── etc
│   │   ├── include
│   │   └── src
│   └── zidl
│       ├── include
│       └── src
├── test
└── utils
  • usage
        "usage:\n"
        "  -h                          |help text for the tool\n"
        "  -lc                         |a list of system information clusters\n"
        "  -ls                         |a list of system abilities\n"
        "  -c                          |all system information clusters\n"
        "  -c [base system]            |system information clusters labeled \"base\" and \"system\"\n"
        "  -s                          |all system abilities\n"
        "  -s [SA0 SA1]                |system abilities labeled \"SA0\" and \"SA1\"\n"
        "  -s [SA] -a ['-h']           |system ability labeled \"SA\" with arguments \"-h\" specified\n"
        "  -e                          |faultlogs of crash history\n"
        "  --net                       |dump network information\n"
        "  --storage                   |dump storage information\n"
        "  -p                          |processes information, include list and infromation of processes"
        " and threads\n"
        "  -p [pid]                    |dump threads under pid, includes smap, block channel,"
        " execute time, mountinfo\n"
        "  --cpuusage [pid]            |dump cpu usage by processes and category; if PID is specified,"
        " dump category usage of specified pid\n"
        "  --cpufreq                   |dump real CPU frequency of each core\n"
        "  --mem [pid]                 |dump memory usage of total; dump memory usage of specified"
        " pid if pid was specified\n"
        "  --zip                       |compress output to /data/log/hidumper\n";

如上,我们可以看出hidumper能查看几乎OpenHarmony里内的所有信息,比如:

  • 查看系统ability信息,其中也包括HiDumperService
# hidumper -ls
System ability list:
RenderService                    AbilityManagerService            DataObserverMgr
UriPermissionMgr                 AccountMgr                       BundleMgr
FormMgr                          ApplicationManagerService        Installd
AccessibilityManagerService      UserIdmService                   UserAuthService
AuthExecutorMgrService           PinAuthService                   FaceAuthService
WifiDevice                       WifiHotspot                      WifiP2p
WifiScan                         BluetoothHost                    NetConnManager
NetPolicyManager                 NetStatsManager                  NetTetheringManager
EthernetManager                  NetsysNative                     HiviewService
HiviewFaultLogger                HiviewSysEventService            HiDumperService
DistributedKvData                DistributedSched                 EnterpriseDeviceManagerService
ResourceSched                    BackgroundTaskManager            WorkSchedule
SocPerfService                   DeviceUsageStatistics            MemoryManagerService
LocationGeoConvert               LocationLocator                  LocationGnss
LocationNetworkLocating          LocationNopowerLocating          DeviceStatusService
AudioDistributed                 PlayerDistributedService         CameraService
AudioPolicyService               AVSessionService                 MultimodalInput
DistributedNotificationService   CommonEventService               PowerManagerService
BatteryService                   ThermalService                   BatteryStatisticsService
DisplayPowerManagerService       AccessTokenManagerService        PrivacyManagerService
KeystoreService                  CertManagerService               SensorService
MiscDeviceService                PasteboardService                TimeService
InputMethodService               ScreenlockService                WallpaperManagerService
ParamWatcher                     SysParamDevice                   TelephonyCellularCall
TelephonyCellularData            TelephonySmsMms                  TelephonyStateRegistry
TelephonyCoreService             UsbService                       WindowManagerService
DisplayManagerService            DSoftbus                         DeviceAuthService
DeviceManagerService             StorageDaemon                    StorageManager
HdfDeviceServiceManager          DistributedFileDaemon            devattest_service
DistributedDeviceProfile         UiService
  • 查看系统ability信息,其中也包括HiDumperService

    -------------------------------[ability]-------------------------------
    
    
    ----------------------------------RenderService---------------------------------
    ------Graphic2D--RenderSerice ------
    Usage:
     h                             |help text for the tool
    screen                         |dump all screen infomation in the system
    surface                        |dump all surface information
    composer fps                   |dump the fps info of composer
    [surface name] fps             |dump the fps info of surface
    composer fpsClear                   |clear the fps info of composer
    [surface name] fpsClear             |clear the fps info of surface
    nodeNotOnTree                  |dump nodeNotOnTree info
    allSurfacesMem                 |dump surface mem info
    RSTree                         |dump RSTree info
    EventParamList                 |dump EventParamList info
    allInfo                        |dump all info
    ...后面有好多
    
  • 查看系统网络信息

    #hidumper --net
    
    -------------------------------[net]-------------------------------
    
    
    cmd is: netstat -nW
    
    Active Internet connections (w/o servers)
    Proto Recv-Q Send-Q Local Address                                       Foreign Address                                     State      
    udp        0      0 127.0.0.1:44451                                     127.0.0.1:9877                                      ESTABLISHED
    udp        0      0 127.0.0.1:37649                                     127.0.0.1:9877                                      ESTABLISHED
    Active UNIX domain sockets (w/o servers)
    Proto RefCnt Flags	 Type	    State	    I-Node Path
    unix  2      [ ]         DGRAM                        1675 /dev/unix/socket/fd_holder
    unix  74     [ ]         DGRAM                         344 /dev/unix/socket/hilogInput
    unix  2      [ ]         DGRAM                        1719 /dev/unix/socket/hisysevent
    unix  2      [ ]         SEQPACKET                   24844 /dev/unix/socket/hdcd
    ...后面还有好多
    
  • 查看系统进程信息

    #hidumper -p
    
    -------------------------------[processes]-------------------------------
    
    
    cmd is: ps -efT
    
    UID            PID   TID  PPID TCNT STIME TTY          TIME CMD
    root             1     1     0    1 15:55:05 ?     00:00:03 init --second-stage
    root             2     2     0    1 15:55:05 ?     00:00:00 [kthreadd]
    root             3     3     2    1 15:55:05 ?     00:00:00 [rcu_gp]
    root             4     4     2    1 15:55:05 ?     00:00:00 [rcu_par_gp]
    root             8     8     2    1 15:55:05 ?     00:00:00 [mm_percpu_wq]
    root             9     9     2    1 15:55:05 ?     00:00:00 [rcu_tasks_rude_]
    ...后面还有好多
    
  • 查看系统内存信息

    #hidumper --mem
    
    -------------------------------[memory]-------------------------------
    
    Total Memory Usage by PID:
    PID  Name                Total Pss(xxx in SwapPss)   Total Vss   Total Rss   Total Uss          GL       Graph
    1    	init               1217(0 in SwapPss) kB     4612 kB     3600 kB      828 kB        0 kB        0 kB
    241  	watchdog_servic    260(0 in SwapPss) kB     3160 kB     2320 kB      232 kB        0 kB        0 kB
    253  	hilogd             2414(0 in SwapPss) kB     5968 kB     4576 kB     2252 kB        0 kB        0 kB
    254  	hdf_devmgr         600(0 in SwapPss) kB     6440 kB     3320 kB      496 kB        0 kB        0 kB
    255  	hiview             4780(0 in SwapPss) kB    79168 kB    14752 kB     3148 kB        0 kB        0 kB
    256  	storage_daemon     1539(0 in SwapPss) kB    11404 kB     7024 kB      932 kB        0 kB        0 kB
    ...后面有好多
    
  • 查看系统错误

    #hidumper -e
    
    -------------------------------[faultlog]-------------------------------
    
    
    /data/log/faultlog/faultlogger/jscrash-ohos.samples.videoplayer-20010040-20230328160126
    
    Generated by HiviewDFX@OpenHarmony
    ================================================================
    Device info:OpenHarmony 3.2
    Build info:OpenHarmony 3.2.11.2
    Module name:ohos.samples.videoplayer
    Version:1.0.0
    Pid:1763
    Uid:20010040
    Lifetime: 0.000000s
    Js-Engine: ark
    page: pages/Player.js
    Error message: assertion (false) failed: type mismatch
    Stacktrace:
        at clearVideoPlayer (/ets/pages/Player.ets:213:7)
        at onPageHide (/ets/pages/Player.ets:200:5)
    ...后面还有好多
    

从上面列举的一些命令可以看出hidumper是个集成入口,有些用了Linux下的常规命令,如ps,netstat,有些用OH内特制的内容,如systemability,faultlog


基本原理

  • hidumper同OHOS里的其他服务一样都提供framework和service架构,通过IPC方式通过hidumperservice服务执行具体命令。

  • 功能定义:

    在下面的问题提供三部分内容:

    base/hiviewdfx/hidumper/frameworks/native/src/util/config_data.cpp
    1. 功能定义
    const std::string ConfigData::CONFIG_NAME_SPLIT = "_";
    const std::string ConfigData::CONFIG_GROUP = "group";
    ...
    const std::string ConfigData::CONFIG_DUMPER_LIST_SYSTEM_ABILITY = ConfigData::CONFIG_DUMPER_LIST_ + "system_ability";
    ...
    const std::string ConfigData::STR_ABILITY = "ability";
    const std::string ConfigData::STR_BASE = "base";
    const std::string ConfigData::STR_SERVICE = "service";
    const std::string ConfigData::STR_SYSTEM = "system";
    
    2. dumper方法
    const ConfigData::ItemCfg ConfigData::baseInfoDumper_[] = {
        {
            .name_ = "dumper_base_info",
            .desc_ = "Base Information",
            .target_ = "",
            .section_ = "",
            .class_ = DumperConstant::API_DUMPER,
            .level_ = DumperConstant::NONE,
            .loop_ = DumperConstant::NONE,
            .filterCfg_ = "",
        },
        {
            .name_ = "",
            .desc_ = "",
            .target_ = "",
            .section_ = "",
            .class_ = DumperConstant::FD_OUTPUT,
            .level_ = DumperConstant::NONE,
            .loop_ = DumperConstant::NONE,
            .filterCfg_ = "",
        },
    };
    
    3. 功能组定义
    ...
    const std::string ConfigData::testGroup_[] = {
        "dumper_test",
    };
    
    const ConfigData::GroupCfg ConfigData::groups_[] = {
        {
            .name_ = ConfigData::CONFIG_GROUP_CPU_FREQ,
            .desc_ = "group of cpu freq dumper",
            .list_ = cpuFreqGroup_,
            .size_ = ARRAY_SIZE(cpuFreqGroup_),
            .type_ = DumperConstant::GROUPTYPE_CPUID,
            .expand_ = true,
        },
    ...
    
  • 简单调用流程:

    graph LR
    main --> DumpManagerClient --> DumpManagerService --> DumpImplement
    
    
  • 功能实现流程:

    graph LR
    CmdParse --> GetDumperConfigs --> GetExecutorConfigList --> setExecutorList --> SetProgressEnabled --> DumpDatas
    
    • CmdParse: 解析命令
    • GetDumperConfigs: 获取配置
    • GetExecutorConfigList: 根据配置获取执行命令
    • setExecutorList: 生成执行命令列表,通过ptrExecutorFactoryMap_获得对应executor
    • SetProgressEnabled: 设置执行开关
    • DumpDatas: 执行命令,获取输出信息
  • executor实现:

    //命令调用
    popen 对应 dumper里.class_ = DumperConstant::CMD_DUMPER,
    
    //文件读取
    fdopen 对应 dumper里 .class_ = DumperConstant::FILE_DUMPER,
    
    //api接口读取
    提供对应的API调用,如GetDisplayVersion, 对应 dumper里 .class_ = DumperConstant::API_DUMPER,
    

小结

本章我们讲了hidumper,作为开发者的查询工具,通过此工具可以查询系统信息,服务信息,进程栈等信息。通过此工具可以协助开发者发现一些系统运行信息,比如进程,线程,内存,CPU等信息;当然也可自己根据具体内容实现实现自己的对应查看工具:)

 最后

有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习是非常有必要的。 

点击领取→【纯血版鸿蒙全套最新学习资料】(安全链接,放心点击

这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、(南向驱动、嵌入式等)鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。

希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!


 鸿蒙(HarmonyOS NEXT)最新学习路线

有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)与鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。

获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

HarmonyOS Next 最新全套视频教程

 《鸿蒙 (OpenHarmony)开发基础到实战手册》

OpenHarmony北向、南向开发环境搭建

《鸿蒙开发基础》

  • ArkTS语言
  • 安装DevEco Studio
  • 运用你的第一个ArkTS应用
  • ArkUI声明式UI开发
  • .……

《鸿蒙开发进阶》

  • Stage模型入门
  • 网络管理
  • 数据管理
  • 电话服务
  • 分布式应用开发
  • 通知与窗口管理
  • 多媒体技术
  • 安全技能
  • 任务管理
  • WebGL
  • 国际化开发
  • 应用测试
  • DFX面向未来设计
  • 鸿蒙系统移植和裁剪定制
  • ……

《鸿蒙进阶实战》

  • ArkTS实践
  • UIAbility应用
  • 网络案例
  • ……

大厂面试必问面试题

鸿蒙南向开发技术

鸿蒙APP开发必备

鸿蒙生态应用开发白皮书V2.0PDF


请点击→纯血版全套鸿蒙HarmonyOS学习资料

总结
总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,他们才能在这个变革的时代中立于不败之地。 

                    

                   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值