HDC2021技術分論壇:分散式除錯、調優能力解決方案

HarmonyOS開發者社群發表於2021-11-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中新增的功能定能幫你解決。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70009402/viewspace-2843183/,如需轉載,請註明出處,否則將追究法律責任。

相關文章