作者:yangjianwei 华为高级工程师
HarmonyOS 致力于提供 1 +8+ N 智慧全场景解决方案,打造设施流转、多端协同的分布式体验,实现一次开发、多端部署,让分布式应用的开发更加简略。
针对分布式应用的调试问题,DevEco Studio 提供了分布式调试、调优能力解决方案,解决开发者面临的调试不间断、操作繁琐、性能和性能异样难定位等泛滥痛点问题。上面让咱们先来一睹为快。
注:本文波及的 DevEco Studio 分布式调试和调优的局部能力依赖于 OS 接口,打算将在 HarmonyOS 3.0 Beta 版本零碎公布后能力反对。
一、分布式调试能力
DevEco Studio 将为开发者提供分布式调试能力解决方案。通过在各个设施上的 Debug Agent 代理对立对接不同语言的调试器,调试代理负责将 DevEco Studio 中的调试插件中的调试命令转换为对不同调试器的申请,包含单步调试 Step Into/Step Out/Step Over、跨模块步入,恢复程序等调试性能,Debugger 插件负责将所有的调试信息以合乎开发者需要的形式展现进去。
图 1 DevEco Studio 的分布式调试能力
上面,咱们将对 DevEco Studio 新增的分布式调试能力进行介绍。
- 分布式跨设施跨语言调试
DevEco Studio 将反对开发者抉择多个设施进行调试,并能在多个设施、多种语言的调试间晦涩切换。在跨设施、跨语言调用接口处,通过点击“Step Into”,能激活被调用设施的调试,中断在调用接口的响应处,并持续调试。同时,在 IDE 中还展现了多设施多语言调试的堆栈列表,实现断点对立治理、变量对立查看,使开发者定位问题更加高效便捷。
- 分布式异样故障主动捕捉
在分布式应用开发过程中,开发人员最依赖的就是日志,日志数量过大容易错过要害信息。HiTrace 新增的主动异样捕捉与辅助诊断的能力,可将利用运行异样主动上报到 Events 视图中,包含 Java/C++/JS 的解体异样。可通过异样事件中的堆栈信息,间接定位到源代码。同时能够查看一般业务事件信息,并关联出与此事件相关联的日志。这些性能极大缩小分布式场景下收集、查看、剖析日志的工夫。
图 2 异样故障主动捕捉
- 跨设施状态流转、分布式堆栈可视化
以后开发者通常是通过查看调试的堆栈列表来定位跟踪代码问题,且分布式应用的堆栈列表往往是割裂不间断的,给开发者跟踪散布式调度的代码造成了妨碍。因而 DevEco Studio 将推出跨设施流转、分布式堆栈可视化性能。
(1)跨设施状态流转
Device Transfer 视图以活泼简洁的模式出现了设施间的组网关系和连贯状态,将设施以不同组网的分类模式进行分组,组内之间的设施能够显示它们的具体信息和原子化服务的动静流转关系。如图所示,每个球状图形示意一台设施,蓝色示意与 IDE 相连接,黄色示意该组网内未与 IDE 连贯的设施,它们之间的箭头代表设施间原子化服务能力的调用,有助于开发者疾速了解设施间的流转及互动关系。
图 3 Device Transfer 视图
(2)分布式堆栈可视化
分布式堆栈可视化性能突破陈规,将函数之间的调用关系以直观的可视化构造图形出现进去,并保留了历史调用,克服了跨设施跨语言堆栈列表宰割不间断的弊病,如图中,Call Stack view 出现了不同设施调试的模块,它们应用不同的色彩示意,点击图中的函数节点能主动定位到代码中的函数处。使开发者溯源代码更加轻松快捷。
图 4 Call Stack 视图
- 时光调试:在 JS 上反对逆向调试
调试过程中,开发者错过查看关键性变量值,或者想调试函数曾经走完的分支,此时往往须要重新启动调试,定位一个 bug,往往须要调试很屡次能力解决,费时费力。如何时光穿梭,回到执行须要调试的代码地位处?
DevEco Studio 将提供时光调试性能,帮忙你回退到要害代码地位,调试一次即可找出代码问题。时光调试反对在函数体内自在后退或回退,反对回退到上一行(Step Back)、回退到上一个断点(Run Back To Breakpoint),回退到鼠标地位(Run Back To Active Line),回退到上一个函数的最初一行(Step Back Into),回退到办法的调用处(Step Back Out)。所有变量值、所有调试状态都复原至你未执行后续代码的状态,帮忙你调试一次即可找出代码问题。
图 5 JS 调试根底上减少逆向调试
二、分布式调优能力
分布式协同场景中跨设施业务性能瓶颈如何定位?JS 利用的性能剖析与内存剖析如何来做?性能采集过程中的数据是否正当?这些性能调优的问题,同样也困扰着很多的开发者。
DevEco Studio 中也将新增 HarmonyOS 分布式性能 Profiler 的整体计划,在每个设施上会主动部署一个 Profiler 的代理,这个代理将通过与 JS 执行引擎,Java 执行引擎,C++ 性能采集器等模块进行交互,获取代码执行过程中的性能数据,通过时钟同步,生成面向开发者的多种运行性能和内存剖析视图。上面咱们将对 DevEco Studio 中新增的多设施协同的性能跟踪、基于 JS 的利用的运行性能和对内存剖析,针对性能数据主动辅助剖析方进行论述。
图 6 分布式性能调优能力
- 多设施协同性能跟踪
DevEco Studio 将提供跨设施协同的零碎跟踪能力。次要包含:
● 丢帧统计
统计调试过程中丢帧状况,显示丢帧的序号以及丢帧率;
● 分布式时延
一次分布式业务运行过程中,同时实现跨设施的零碎调用跟踪;提供跨设施调用栈的时延,不同设施上各零碎调用应用不同色彩辨别,各调用过程的耗时以及调用间的时延别离显示,并且高亮此次业务中高耗时的阶段,能够帮助开发者疾速定位耗时的流程。同时 Timeline 和调用栈视图可双向联动,晋升调试效率。
图 7 零碎跟踪能力
- JS 利用运行性能剖析
JS 作为 HarmonyOS 利用开发的次要语言。咱们开发网页时对 JS 性能剖析往往都是在 Chrome 开发工具中来实现,当初在 DevEco Studio 中,减少了对 JS 利用运行性能剖析的反对。用户可通过 Call Chart、Flame Chat、Top Down 和 Bottomup 等视图查看办法间调用关系和调用耗费时长,便于辨认长耗时办法。
图 8 Call Chart 和 Flame Chat 视图
- JS 利用堆内存剖析
针对 JavaScript 内存无奈回的收状况,DevEco Studio 将新增对 JS 利用堆内存剖析的反对。开发者可通过实时查看利用内存占用和变化趋势,疾速发现可能存在的内存抖动和内存透露等问题。通过抓取 / 导入 / 导出 JS 堆内存快照,可进一步查看 JS 对象内存调配、调用、援用状况。开发者还能够比对剖析多个内存快照,察看各对象的内存具体变动状况,便于疾速定位可能造成内存性能瓶颈或者内存透露的对象。
图 9 堆内存剖析
- 性能数据主动辅助剖析
在性能剖析过程中,个别的性能剖析工具只给出了对性能数据的根底统计。针对启动和 UI 方面的体验问题,DevEco Studio 主动对可能存在的问题给出提醒与批改倡议,开发者可依据倡议进一步确认并进行优化。
用户从下拉列表中选取已装置的利用包名,IDE 工具会主动启动选取的利用并抓取利用启动过程中的 CPU 占用率,IO 读写量,应用内存等资源信息和该过程的函数调用信息。抓取完结后点击记录图标会主动剖析获取信息,如果资源占用过多或函数调用时长偏长,会在性能剖析报告页具体展现详细信息,同时局部常见问题会有优化倡议的提醒,助力开发者疾速发现性能短板,晋升利用性能体验。
图 10 性能数据主动辅助剖析
DevEco Studio 还为开发者提供利用功耗问题剖析以及功耗调优的能力,次要包含:
● 整机耗电合成
提供了整机的耗电状况,并对 TOP 耗电器件 CPU、屏幕、GPU、Modem、WIFI、Audio、BT、GPS 等器件进行了功耗合成,并记录了影响器件耗电的各器件的状态详情,同时支持系统维度的影响功耗状态的信息展现,不便开发者对整机的耗电状况有整体把握,并进行耗电剖析。
● 利用合成
将单个利用的耗电状况依照器件维度合成,后续可反对利用线程维度的拆解,不便辨认到利用功耗问题时,疾速的锁定问题线程。同时对利用 CPU 负载率实时展现,开发者可不便看到利用的 CPU 的负载状况。
至此,本期内容就完结了,随着时代的倒退,分布式应用的倒退已成趋势,那些曾让开发者抓狂的分布式调优及调试问题,DevEco Studio 中新增的性能定能帮你解决。