作者:杨建伟华为高级工程师HarmonyOS致力于提供1+8+N智能全场景解决方案,打造设备流转、多端协同的分布式体验,实现一次性开发,多端部署,让分布式应用的开发变得更加简单。针对分布式应用的调试,DevEcoStudio提供了分布式调试和调优能力的解决方案,解决了开发者面临的调试不连续、操作繁琐、功能和性能异常难以定位等诸多痛点。下面让我们快速浏览一下。注:本文涉及的DevEcoStudio部分分布式调试调优能力依赖OS接口,计划在HarmonyOS3.0Beta系统发布后支持。1、分布式调试能力DevEcoStudio将为开发者提供分布式调试能力解决方案。通过每个设备上的DebugAgent代理连接不同语言的调试器,调试代理负责将DevEcoStudio中调试插件中的调试命令转换为对不同调试器的请求,包括单步调试StepInto/StepOut/StepOver、跨模块、还原程序等调试功能,Debugger插件负责以符合开发者需求的方式显示所有调试信息。图1DevEcoStudio的分布式调试能力下面介绍一下DevEcoStudio新增的分布式调试能力。分布式跨设备、跨语言调试DevEcoStudio将支持开发者选择多设备进行调试,并可在多设备、多语言调试之间平滑切换。在跨设备跨语言调用界面,点击“StepInto”,可以激活被调用设备的调试,中断调用界面的响应,继续调试。同时,IDE中也展示了多设备、多语言调试的堆栈列表,实现了断点的统一管理和变量的统一查看,让开发者更高效、更方便地定位问题。分布式异常故障自动捕获在分布式应用开发过程中,开发者对日志的依赖最大。如果日志数量过多,很容易遗漏关键信息。HiTrace新增自动异常捕获和辅助诊断能力,可以自动将应用程序运行异常报告给Events视图,包括Java/C++/JS崩溃异常。通过异常事件中的栈信息可以直接定位到源码。同时,您可以查看常见的业务事件信息,关联与该事件关联的日志。这些功能大大减少了分布式场景下收集、查看、分析日志的时间。图2异常故障自动抓取跨设备状态流,分布式栈可视化目前开发者通常通过查看调试栈列表来定位跟踪代码问题,而分布式应用的栈列表往往是碎片化、不连续的,开发者可以跟踪分布式调度代码阻塞。因此,DevEcoStudio将推出跨设备流式传输和分布式堆栈可视化功能。(1)跨设备状态传递DeviceTransfer视图以生动简洁的形式呈现设备之间的联网关系和连接状态。设备按不同的网络分类进行分组,组内的设备可以显示其特定详细信息。信息和原子化服务的动态流动关系。如图所示,每个球形图代表一个设备,蓝色代表与IDE连接,黄色代表网络中未连接IDE的设备,它们之间的箭头代表设备间原子服务能力的调用。它可以帮助开发人员快速了解设备之间的流程和交互。图3DeviceTransfer视图(2)分布式栈可视化分布式栈可视化功能打破刻板印象,以直观的可视化结构图呈现函数间的调用关系,并保留历史调用,克服了跨设备、跨语言栈列表的缺点不连续分割。如图所示,CallStack视图展示了不同设备调试的模块,用不同的颜色表示。点击图中某个函数节点,可以自动定位代码中的函数。让开发者追溯源码更简单、更快捷。图4CallStackViewTimeDebugging:在JS支持逆向调试的调试过程中,开发者遗漏检查关键变量值,或者想调试函数已经完成的分支。这个时候往往需要重新调试才能定位bug。需要多次调试才能解决,费时费力。如何穿越回过去,回到需要调试的代码执行的位置?DevEcoStudio会提供定时调试功能,帮助你回滚到关键代码位置,调试一次就可以发现代码问题。时间调试支持在函数体中自由前进或后退,支持回到上一行(StepBack)、回到上一个断点(RunBackToBreakpoint)、回到鼠标位置(RunBackToActiveLine)、Returnto前一个函数的最后一行(StepBackInto),并返回方法调用(StepBackOut)。所有变量值和所有调试状态都恢复到你没有执行后续代码时的状态,帮助你调试一次后发现代码问题。图5在JS调试的基础上增加逆向调试2.分布式调优能力分布式协同场景下如何定位跨设备业务性能瓶颈?如何做JS应用的性能分析和内存分析?绩效采集过程中的数据是否合理?这些性能调优问题也困扰着很多开发者。HarmonyOS分布式性能Profiler整体解决方案也将加入DevEcoStudio。Profiler代理将自动部署在每台设备上。该代理将与JS执行引擎、Java执行引擎、C++性能收集器等模块进行交互,获取代码执行过程中的性能数据,并在时钟同步后为开发者生成各种运行性能和内存分析视图。下面将对DevEcoStudio新增的多设备协同性能跟踪、JS类应用运行性能及内存分析、性能数据自动辅助分析进行说明。图6分布式性能调优能力多设备协同性能跟踪DevEcoStudio将提供跨设备协同系统跟踪能力。主要包括:●Framelossstatistics对调试过程中的帧丢失进行统计,显示帧丢失的序号和帧丢失率。●分布式服务运行时的分布式延时,同时完成跨设备的系统调用跟踪;提供跨设备的调用栈的延迟,不同设备上用不同的颜色区分每个系统调用,分别展示每个调用过程的耗时和调用之间的延迟,这个业务中的耗时阶段是高亮显示,可以帮助开发者快速定位耗时进程。同时Timeline和callstackview可以双向联动,提高调试效率。图7系统溯源JS应用性能分析JS是鸿蒙应用开发的主要语言。我们在开发网页的时候,经常会在Chrome开发工具中进行JS性能分析。现在在DevEcoStudio中,增加了对JS应用性能分析的支持。用户可以通过CallChart、FlameChat、TopDown、Bottomup等视图查看方法之间的调用关系和调用耗时,方便识别耗时长的方法。图8CallChart和FlameChat视图JS应用堆内存分析针对JavaScript内存无法回收的情况,DevEcoStudio会增加对JS应用堆内存分析的支持。开发者可以通过实时查看应用内存使用情况和变化趋势,快速发现内存抖动、内存泄漏等可能存在的问题。通过抓取/导入/导出JS堆内存快照,可以进一步查看JS对象的内存分配、调用、引用情况。开发者还可以对比分析多个内存快照,观察每个对象的详细内存变化,便于快速定位可能导致内存性能瓶颈或内存泄漏的对象。图9堆内存分析性能数据自动辅助分析在性能分析过程中,一般的性能分析工具只提供性能数据的基本统计。对于启动和UI的体验问题,DevEcoStudio会针对可能出现的问题自动给出提示和修改建议,开发者可以根据建议进一步确认和优化。用户从下拉列表中选择安装的应用程序包名,IDE工具会自动启动选择的应用程序,并捕获应用程序启动过程中的CPU使用率、IO读写量、内存使用量等资源信息,以及进程的函数调用信息。.抓拍完成后,点击记录图标,自动分析获取信息。如果资源占用过多或函数调用时间过长,性能分析报告页面会显示详细信息。同时,一些常见问题会有优化建议,帮助开发者快速发现性能不足,提升应用性能体验。图10性能数据自动辅助分析DevEcoStudio还为开发者提供了应用功耗问题分析和功耗优化的能力,主要包括:整机功耗分解提供整机功耗,TOPpowerconsumptionCPU,screen,GPU,Modem,WIFI,Audio,BT,GPS等设备对功耗进行了分解,记录了各个设备影响设备功耗的状态详情,同时时间支持影响系统维度功耗状态的信息展示,方便开发者全面掌握整机功耗情况,进行功耗分析。●应用分解,将单个应用的功耗按照设备维度进行分解,进而支持应用线程维度的拆解,当发现应用功耗问题时,可以快速锁定问题线程。同时实时显示应用的CPU负载率,开发者可以很方便的看到应用的CPU负载情况。至此,本期内容就结束了。随着时代的发展,开发分布式应用已经成为一种趋势。那些让开发者抓狂的分布式调优调试问题,DevEcoStudio中的新功能一定会帮你解决。扫描二维码添加开发者小助手微信,获取更多HarmonyOS开发资源和开发者活动信息
