记一些做鸿蒙系统开发或鸿蒙应用开发时可能会用到的调试命令。
准备 HDC 二进制文件
HDC 是鸿蒙设备的专属调试工具,类似于 ADB 之于 Android 开发的作用。可以通过 HDC 运行一些调试命令。
首先下载并安装 DevEco Studio,安装路径下会包含 OpenHarmony SDK,其中就有 HDC 工具。
下载 DevEco Studio下载安装完成后在安卓目录下找到 HDC 工具所在目录,并将其添加到系统环境变量中:
DevEco Studio安装目录/sdk/default/openharmony/toolchains
添加环境变量完成后新建终端窗口,使用命令 hdc --version 命令查看当前的工具版本。
$ hdc --version
Ver: 3.2.0b
打开鸿蒙设备的 USB 调试
进入到设置的“关于本机”页面,连续点击“软件版本”多次,出现开发者选项。
之后在设置->系统页面中可以找到“开发者选项”,进入后打开“USB 调试”。
之后使用 HDC 命令时,设备上会弹出申请 USB 调试的授权弹框。
常用命令
一些常用的调试命令在网上已经有很完整的文章了,参考:【全网最全】鸿蒙 HDC 命令合集 (awesome-hdc) 这里介绍一些别的有用命令。
DUMP 信息
获取窗口信息
可以用于排查应用窗口生命周期相关的问题。
$ hdc shell hidumper -s WindowManagerService -a '-a'
-------------------------------[ability]-------------------------------
----------------------------------WindowManagerService----------------------------------
-------------------------------------ScreenGroup 0-------------------------------------
WindowName DisplayId Pid WinId Type Mode Flag ZOrd Orientation [ x y w h ] [ OffsetX OffsetY ] [ ScaleX ScaleY PivotX PivotY ]
SCBScenePanel12 0 11684 6 2109 1 0 100 0 [ 0 0 1316 2832 ] [ 0 0 ] [ 1 1 0.5 0.5 ]
BackgroundBlurView3 0 11684 7 2109 1 0 101 0 [ 0 0 1316 2832 ] [ 0 0 ] [ 1 1 0.5 0.5 ]
SCBWallpaper6 0 11684 10 2000 1 0 1 0 [ 0 0 1316 2832 ] [ 0 0 ] [ 1 1 0.5 0.5 ]
SCBDesktop8 0 11684 13 2001 1 0 2 0 [ 0 0 1316 2832 ] [ 0 0 ] [ 1 1 0.5 0.5 ]
SCBGestureNavBar15 0 11684 21 2111 1 0 2200 0 [ 0 2734 1316 98 ] [ 0 0 ] [ 1 1 0.5 0.5 ]
SCBGestureBack20 0 11684 26 2111 1 0 4102 0 [ 0 0 1316 2832 ] [ 0 0 ] [ 1 1 0.5 0.5 ]
SCBStatusBar25 0 11684 32 2108 1 0 2202 0 [ 0 0 1316 136 ] [ 0 0 ] [ 1 1 0.5 0.5 ]
settings0 0 12863 35 1 1 16 102 0 [ 0 0 1316 2832 ] [ 0 0 ] [ 1 1 0.5 0.5 ]
---------------------------------------------------------------------------------------
SCBKeyboardPanel 0 11684 4 2134 1 0 -1 0 [ 0 0 0 0 ] [ 0 0 ] [ 1 1 0 0 ]
SCBScenePanel1 0 11684 5 2109 1 0 -1 0 [ 0 0 0 0 ] [ 0 0 ] [ 1 1 0 0 ]
TransparentView4 0 11684 8 2136 1 0 -1 0 [ 0 0 0 0 ] [ 0 0 ] [ 1 1 0 0 ]
BackgroundBlurView5 0 11684 9 2109 1 0 -1 0 [ 0 0 0 0 ] [ 0 0 ] [ 1 1 0 0 ]
SCBNegativeScreen9 0 11684 14 2126 1 0 -1 0 [ 0 0 1316 2832 ] [ 0 0 ] [ 1 1 0 0 ]
SCBGlobalSearch10 0 11684 15 2125 1 0 -1 0 [ 0 0 1316 2832 ] [ 0 0 ] [ 1 1 0 0 ]
SCBSysDialogDefault1 0 11684 17 2104 1 0 -1 0 [ 0 0 1316 2832 ] [ 0 0 ] [ 1 1 0.5 0.5 ]
SCBBannerNotificatio 0 11684 18 2106 1 0 -1 0 [ 0 0 1316 2832 ] [ 0 0 ] [ 1 1 0.5 0.5 ]
SCBScreenLock13 0 11684 19 2110 1 0 -1 0 [ 0 0 1316 2832 ] [ 0 0 ] [ 1 1 0.5 0.5 ]
SCBFormCenter14 0 11684 20 2135 1 0 -1 0 [ 0 0 1316 2832 ] [ 0 0 ] [ 1 1 0.5 0.5 ]
SCBDropdownPanel16 0 11684 22 2109 1 0 -1 0 [ 0 0 1316 2832 ] [ 0 0 ] [ 1 1 0.5 0.5 ]
SCBSysDialogUpper17 0 11684 23 2111 1 0 -1 0 [ 0 0 1316 2832 ] [ 0 0 ] [ 1 1 0 0 ]
SCBVolumePanel18 0 11684 24 2111 1 0 -1 0 [ 0 0 1316 2832 ] [ 0 0 ] [ 1 1 0 0 ]
SCBSideScenePanel19 0 11684 25 2135 1 0 -1 0 [ 0 0 1316 2832 ] [ 0 0 ] [ 1 1 0 0 ]
SCBSideEdgeBar21 0 11684 27 2135 1 0 -1 0 [ 0 0 1316 2832 ] [ 0 0 ] [ 1 1 0 0 ]
SCBSystemTopPanel22 0 11684 28 2111 1 0 -1 0 [ 0 0 1316 2832 ] [ 0 0 ] [ 1 1 0 0 ]
SCBPrivacyIndicator2 0 11684 29 2127 1 0 -1 0 [ 0 0 1316 2832 ] [ 0 0 ] [ 1 1 0 0 ]
SCBGestureTopBar24 0 11684 31 2111 1 0 -1 0 [ 0 0 1316 136 ] [ 0 0 ] [ 1 1 0.5 0.5 ]
SceneSessionAdapter2 0 11684 33 2109 1 0 -1 0 [ 0 0 0 0 ] [ 0 0 ] [ 1 1 0 0 ]
Focus window: 35
All Focus window:
DisplayId: 0 WindowId: 35
SingleHand: X[0] Y[0] scale[1]
Total window num: 29
Highlighted windows: 35
获取屏幕信息
可以用于排查涉及多屏/跨屏/虚拟屏相关的问题。
$ hdc shell hidumper -s DisplayManagerService -a '-a'
-------------------------------[ability]-------------------------------
----------------------------------DisplayManagerService----------------------------------
-------------- DMS FREEZED PID LIST --------------
[PID: 5047]: [amplemanagement]
[PID: 5098]: [hms.pushservice]
[PID: 11722]: [dispatchservice]
[PID: 11740]: [.hms.adsservice]
[PID: 11755]: [app.intelligent]
[PID: 12228]: [hod:inputMethod]
[PID: 30908]: [os.FusionSearch]
[PID: 37683]: [hm.article.news]
[PID: 38231]: [ysDialog/common]
-------------- DMS KEY EVENTS LIST --------------
[01-12 15:42:22.170]: Dms construct.
[01-12 15:42:25.479]: Default screen id : 0
[01-12 15:42:25.491]: Dms OnScreenChange register success.
[01-12 15:42:25.491]: OnScreenChange triggered. screenId: 0 screenEvent: 0
[01-12 15:42:25.492]: Dms register rs events success.
[01-12 15:42:25.498]: Dms subscribed to sensor successfully.
[01-12 15:42:25.499]: Dms init end.
[01-12 15:42:25.503]: Dms AddSystemAbilityListener finished.
[01-12 15:42:25.503]: Dms onstart end.
[01-12 15:42:25.541]: CreateScreenProperty by rsInterface success.
[01-12 15:42:25.564]: create screen session success.
[01-12 15:42:25.564]: Dms RefreshRateChange register success.
[01-12 15:42:25.565]: screenRotation: 0 ret value: 0correctionRet:0
[01-12 15:42:25.636]: GetScreenPower state:0
[01-12 15:42:28.203]: GetScreenPower state:0 screenId:0
[01-12 15:42:58.499]: set client userId: 100 newScbPid: 11684 clientName: com.ohos.sceneboard
[01-12 15:42:58.513]: oldUserId: 0 currentScbPId: -1 newUserId: 100 newScbPid: 11684 coldBoot: 1
-------------- DMS Multi User Info --------------
[oldScbPid:]
[userId:] 100
[ScbPid:] 11684
dms.hidumper.supportdebug false
获取 RS 树信息
用于获取渲染节点树信息,当出现显示问题时有用。返回的信息很大,可以先存到设备文件夹后通过文件传输命令传回本地。
hdc shell hidumper -s RenderService -a 'allInfo' | tee /data/local/tmp/rs.dump >/dev/null
hdc file recv /data/local/tmp/rs.dump .
重启相关
整机重启
hdc shell reboot
重启到 Recovery 模式
hdc shell reboot recovery
重启到 Fastboot
通常用于刷机。
hdc shell reboot bootloader
重启 SceneBoard
当系统出现 Bug 时,可以尝试重启 SceneBoard 恢复。
hdc shell kill -9 $(pidof com.ohos.sceheboard)
日志相关
导出 HiLog 日志
获取设备日志,通常用于问题定位。
hdc file recv /data/log/hilog .
切换 HiLog 日志打印等级
# 切换到 DEBUG
hdc shell hilog -b D
# 切换到 INFO
hdc shell hilog -b I
清空 HiLog 日志
hdc shell hilog -w clear
导出 FaultLog 日志
通常应用崩溃、系统 crash 后会产生 FaultLog 日志,可以通过命令导出。
hdc file recv /data/log/faultlog/faultlogger .

