HDC2021技术分论坛:分布式调试、调优能力解决方案

HarmonyOS开发者社区 华为终端有限公司 开发者运营  2021-11-25 15:14:19

作者: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新增的分布式调试能力进行介绍。  

 

1. 分布式跨设备跨语言调试

 

DevEco Studio将支持开发者选择多个设备进行调试,并能在多个设备、多种语言的调试间流畅切换。在跨设备、跨语言调用接口处,通过点击“Step Into”,能激活被调用设备的调试,中断在调用接口的响应处,并继续调试。同时,在IDE中还展示了多设备多语言调试的堆栈列表,实现断点统一管理、变量统一查看,使开发者定位问题更加高效便捷。

 

2. 分布式异常故障自动捕获

 

在分布式应用开发过程中,开发人员最依赖的就是日志,日志数量过大容易错过关键信息。HiTrace新增的自动异常捕获与辅助诊断的能力,可将应用运行异常自动上报到Events视图中,包括Java/C++/JS的崩溃异常。可通过异常事件中的堆栈信息,直接定位到源代码。同时可以查看普通业务事件信息,并关联出与此事件相关联的日志。这些功能极大减少分布式场景下收集、查看、分析日志的时间。

图2 异常故障自动捕获

 

3. 跨设备状态流转、分布式堆栈可视化

 

当前开发者通常是通过查看调试的堆栈列表来定位跟踪代码问题,且分布式应用的堆栈列表往往是割裂不连续的,给开发者跟踪分布式调度的代码造成了阻碍。因此DevEco Studio将推出跨设备流转、分布式堆栈可视化功能。

 

(1)跨设备状态流转

 

Device Transfer视图以生动简洁的形式呈现了设备间的组网关系和连接状态,将设备以不同组网的分类形式进行分组,组内之间的设备可以显示它们的具体信息和原子化服务的动态流转关系。如图所示,每个球状图形表示一台设备,蓝色表示与IDE相连接,黄色表示该组网内未与IDE连接的设备,它们之间的箭头代表设备间原子化服务能力的调用,有助于开发者快速理解设备间的流转及互动关系。

图3 Device Transfer视图

 

(2)分布式堆栈可视化

 

分布式堆栈可视化功能打破陈规,将函数之间的调用关系以直观的可视化结构图形呈现出来,并保留了历史调用,克服了跨设备跨语言堆栈列表分割不连续的弊端,如图中,Call Stack view呈现了不同设备调试的模块,它们使用不同的颜色表示,点击图中的函数节点能自动定位到代码中的函数处。使开发者溯源代码更加轻松快捷。

图4 Call Stack视图

 

4. 时光调试:在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 分布式性能调优能力

 

1. 多设备协同性能跟踪

 

DevEco Studio将提供跨设备协同的系统跟踪能力。主要包括:

 

● 丢帧统计

统计调试过程中丢帧情况,显示丢帧的序号以及丢帧率;

 

● 分布式时延

一次分布式业务运行过程中,同时完成跨设备的系统调用跟踪;提供跨设备调用栈的时延,不同设备上各系统调用使用不同颜色区分,各调用过程的耗时以及调用间的时延分别显示,并且高亮此次业务中高耗时的阶段,可以协助开发者快速定位耗时的流程。同时Timeline和调用栈视图可双向联动,提升调试效率。

图7 系统跟踪能力

 

2. JS应用运行性能分析

 

JS作为HarmonyOS应用开发的主要语言。我们开发网页时对JS性能分析往往都是在Chrome开发工具中来完成,现在在DevEco Studio中,增加了对JS应用运行性能分析的支持。用户可通过Call Chart、Flame Chat、Top Down和Bottomup等视图查看方法间调用关系和调用消耗时长,便于识别长耗时方法。

图8 Call Chart和Flame Chat视图

 

3. JS应用堆内存分析

 

针对JavaScript内存无法回的收情况,DevEco Studio将新增对JS应用堆内存分析的支持。开发者可通过实时查看应用内存占用和变化趋势,快速发现可能存在的内存抖动和内存泄漏等问题。通过抓取/导入/导出JS堆内存快照,可进一步查看JS对象内存分配、调用、引用情况。开发者还可以比对分析多个内存快照,观察各对象的内存详细变化情况,便于快速定位可能造成内存性能瓶颈或者内存泄漏的对象。

图9 堆内存分析

 

4. 性能数据自动辅助分析

 

在性能分析过程中,一般的性能分析工具只给出了对性能数据的基础统计。针对启动和UI方面的体验问题,DevEco Studio自动对可能存在的问题给出提示与修改建议,开发者可根据建议进一步确认并进行优化。

 

用户从下拉列表中选取已安装的应用包名,IDE工具会自动启动选取的应用并抓取应用启动过程中的CPU占用率,IO读写量,使用内存等资源信息和该进程的函数调用信息。抓取结束后点击记录图标会自动分析获取信息,如果资源占用过多或函数调用时长偏长,会在性能分析报告页具体展示详细信息,同时部分常见问题会有优化建议的提示,助力开发者快速发现性能短板,提升应用性能体验。

图10 性能数据自动辅助分析

 

DevEco Studio还为开发者提供应用功耗问题分析以及功耗调优的能力,主要包括:

 

● 整机耗电分解

提供了整机的耗电情况,并对TOP耗电器件CPU、屏幕、GPU、Modem、WIFI、Audio、BT、GPS等器件进行了功耗分解,并记录了影响器件耗电的各器件的状态详情,同时支持系统维度的影响功耗状态的信息展示,方便开发者对整机的耗电情况有整体把握,并进行耗电分析。

 

● 应用分解

将单个应用的耗电情况按照器件维度分解,后续可支持应用线程维度的拆解,方便识别到应用功耗问题时,快速的锁定问题线程。同时对应用CPU负载率实时展示,开发者可方便看到应用的CPU的负载情况。

 

至此,本期内容就结束了,随着时代的发展,分布式应用的发展已成趋势,那些曾让开发者抓狂的分布式调优及调试问题,DevEco Studio中新增的功能定能帮你解决。

 

扫码添加开发者小助手微信

获取更多HarmonyOS开发资源和开发者活动资讯

...全文
129 点赞 收藏 回复
写回复
回复
切换为时间正序
请发表友善的回复…
发表回复
相关推荐
发帖
HarmonyOS技术社区
创建于2020-09-25

3453

社区成员

HarmonyOS是一款“面向未来”、面向全场景的分布式操作系统。在传统的单设备系统能力的基础上,HarmonyOS提出了基于同一套系统能力、适配多种终端形态的分布式理念,能够支持多种终端设备。
帖子事件
创建了帖子
2021-11-25 15:14
编辑了帖子
2021-11-25 15:14
社区公告
鸿蒙技术社区致力成为开发者爱好者的交流学习平台,我们希望在这里提供鸿蒙代码实例、项目案例、并提供最新文档翻译。