写点什么

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

  • 2021 年 11 月 18 日
  • 本文字数:3108 字

    阅读完需:约 10 分钟

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

作者: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 中新增的功能定能帮你解决。

用户头像

每一位开发者都是华为要汇聚的星星之火 2021.10.15 加入

提供HarmonyOS关键技术解析、版本更新、开发者实践和活动资讯,欢迎各位开发者加入HarmonyOS生态,一起创造无限可能!

评论

发布
暂无评论
分布式调试、调优能力解决方案|HDC2021技术分论坛