HarmonyOS之HiTrace日志跟踪定位分析
Posted Forever_wj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HarmonyOS之HiTrace日志跟踪定位分析相关的知识,希望对你有一定的参考价值。
一、概述
- 在 HarmonyOS 跨设备分布式应用的问题定位过程中,由于跨设备之间的调用关系复杂,导致问题定位困难。DevEco Studio 提供了 HiTrace 日志跟踪的能力,可以分析和梳理跨设备分布式应用之间的调用关系,通过分析调用链,方便开发者定位调用异常、性能瓶颈等问题。
- 开发者可以通过 HarmonyOS Interface Definition Language(简称 HarmonyOS IDL)实现不同设备之间的跨进程通信(IPC,Inter-Process Communication),即开发者可以在一个设备上访问另一个设备的进程或者调用另一个设备的方法,实现多设备的协同能力。
- 因此,DevEco Studio 基于 HarmonyOS IDL 实现的跨设备的分布式场景,提供了跨设备的 HarmonyOS 分布式应用的调试功能,方便开发者调测分布式应用。
- 前提条件:
-
- 工程中至少包含2个及以上的模块,且模块代码是基于 HarmonyOS IDL 的 Java 语言实现。
-
- 调测的多个设备成功组网,包括连接到同一个 WLAN 网络、登录同一个华为帐号和同时打开蓝牙开关。
-
- 已连接真机设备,或已启动分布式模拟器。
二、跨设备分布式应用调试
- 在涉及跨设备调用的代码行设置断点;
- 选择已创建的跨设备调试配置(Super App)选项,单击如下按钮启动调试:
- 在弹出的设备选择窗口,指定调试设备对应的模块名称:
- 启动调试后,DevEco Studio 将按照勾选的多个设备,分别启动多个调试会话窗口,命名为:“Super App-模块名”,如 Super App-entry:
- 在代码执行到断点处(跨设备调用的代码处),点击 Step Into,快捷键为 F7(Mac 为 F7),则会自动跳转到被调用代码接口方法处;
- 例如,在上图中的调试界面为例,在 Phone 中调用 TV 的音乐播放能力,单击 Step Into,调试窗口将从“Super App-entry”跳转到“Super App-entrytv”窗口,同时,代码也会跳转到对应的接口方法处,无需开发者手动设置断点。
三、HiTrace日志跟踪定位分析
- 在需要跟踪调用链的 RPC 调用处,前后分别添加 Hitrace 类接口,用于采集 Hitrace 日志。对应的示例代码如下所示:
HiTraceId traceId = HiTrace.begin("MyServiceName", HiTrace.HITRACE_FLAG_INCLUDE_ASYNC | HiTrace.HITRACE_FLAG_TP_INFO);
......
HiTrace.end(traceId);
- 在设备上运行应用,跨设备运行分布式应用的方法请参考运行/调试分布式应用。
- 在底部工具栏点击 Profiler,打开 Hitrace 工具:
- 在 Hitrace 窗口,点击 Record 按钮,开始收集 Hitrace 日志信息,然后在设备上操作分布式应用。
- 点击停止按钮,停止收集 Hitrace 日志信息。日志采集完成后,可以看到如下的时序视图(上半部分)和调用链详情视图(下半部分)。
四、Hitrace 调用链分析
- Hitrace 日志采集完成后,会生成时序视图和调用链详情视图,可以利用时序图和调用链详细视图来进行故障定位定界和性能分析。
- 利用时序图+调用链视图中的 Call Tree 视图,可以分析分布式跨设备与跨进程的调用关系:
-
- 在时序图中,使用不同颜色矩形块区分不同的调用关系,在矩形块中,可以展示调用的开始时间、结束时间和处理时长,帮助开发者分析处理性能。
-
- 点击时序图中的矩形块,则会展示进程的调用方向,从而查看其是调用方或被调用方;同时在 Call Tree 视图中,也可以清晰的展示进程的调用关系(单设备跨进程调用、跨设备进程调用、调用时长等)。
- 利用时序图+调用链视图中的 Events 视图,可以进行分布式调用的故障定位定界、诊断和分析:
-
- 在时序图中,可以展示相关的异常事件,包括 Java Crash 异常、JS Crash 异常、C/C++ Crash 异常、跨设备 FA 调用异常、ANR 故障等。
-
- 点击时序图中的异常事件,则会在 Events 视图中展示具体的异常细节,并会自动抓取异常前 30s 的详细日志信息。
以上是关于HarmonyOS之HiTrace日志跟踪定位分析的主要内容,如果未能解决你的问题,请参考以下文章