鴻蒙智聯設備開發,這五大法寶你應該擁有|HDC2021技術分論壇

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":10}},{"type":"color","attrs":{"color":"#40A9FF","name":"blue"}}],"text":"作者:zhaowenguang,dinglu,華爲高級工程師","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Huawei LiteOS是輕量級的開源物聯網操作系統、智能硬件使能平臺,可廣泛應用於智能家居、穿戴式、車聯網、製造業等領域,使物聯網終端開發更簡單、互聯更加容易、業務更加智能、體驗更加順暢、數據更加安全。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"它具有入門簡單、開發便捷,輕量級、低功耗、廣聯接,生態體系完善等優點。提供了若干高效硬件維測能力,通過集成到DevEco Device Tool中,形成了可供開發者使用的調試調優工具,助力開發者在鴻蒙智聯設備調試調優過程中更加精準的分析、定位問題。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"接下來,我們將重點介紹DevEco Device Tool中集成的一系列調試調優工具。","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"一、鴻蒙智聯設備調試調優面臨的挑戰","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"開發者在鴻蒙智聯設備調試調優過程中面臨如下挑戰:","attrs":{}}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"系統鏡像文件太大,分析和優化難度較大。","attrs":{}}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"運行態內存緊缺,系統各任務棧大小無法設置。","attrs":{}}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"性能瓶頸無法定位,不能針對性的進行優化。","attrs":{}}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"僅僅靠添加打印和人工分析日誌來定位問題效率低下。","attrs":{}}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"內存問題最難定位,缺少檢測工具。","attrs":{}}]}]}],"attrs":{}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如何應對這些挑戰,讓開發者能高效且準確的完成鴻蒙智聯設備調試調優?","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"二、高效調試調優五大法寶","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"針對以上挑戰,HUAWEI DevEco Device Tool版本中提供了鴻蒙智聯設備調試調優五大法寶:","attrs":{}},{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"鏡像分析工具、棧估算分析工具、性能分析工具、可視化Trace工具、輕量級內存檢測工具","attrs":{}},{"type":"text","text":",下面我們將逐一介紹。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":10}}],"text":"注:鏡像分析工具和棧估算分析工具已集成於HUAWEI DevEco Device Tool 3.0 Beta1版本中,目前只支持GCC編譯的鏡像,Clang暫不支持。性能分析工具、可視化Trace工具及輕量級內存檢測工具將盡快上線,具體上線時間待官方通知。","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"1. 鏡像分析工具","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"鏡像分析工具,主要解決“資源受限情況下鏡像的分析及優化”。通過對編譯生成的map文件進行內存佔用分析,獲取鏡像中各模塊對ROM、RAM的佔用大小。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"該工具支持查看內存區域總覽、內存詳細信息、文件大小及模塊大小。同時支持一些統計功能,包括排序、過濾、導出表格等操作以及按文件或模塊篩選查看的功能。鏡像分析結果按照內存區域、詳細信息、文件大小和模塊大小4個界面進行展示。","attrs":{}}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"Memory Regions:","attrs":{}},{"type":"text","text":"內存區域界面以表格的形式展示了每個區域的內存使用情況。如圖1所示,Memory Regions包含了起始地址、結束地址、大小、可用內存以及內存佔用。","attrs":{}}]}]}],"attrs":{}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/37/37d070994e92ba5ac2943e677068c7fc.webp","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":10}}],"text":"圖1 Memory Regions","attrs":{}}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"Memory Details:","attrs":{}},{"type":"text","text":"內存詳細信息裏顯示了Section和Symbol的信息。如圖2所示,Memory Details通過樹狀表格展示層級關係、名稱、VMA、LMA以及Size。","attrs":{}}]}]}],"attrs":{}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/68/68161562b00f7f4e0c845a8e7b652e23.webp","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":10}}],"text":"圖2 Memory Details","attrs":{}}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"File Size:","attrs":{}},{"type":"text","text":"文件大小裏展示了.a文件和.o文件的層級關係以及不同section的內存佔用。","attrs":{}}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"Module Size:","attrs":{}},{"type":"text","text":"模塊大小裏展示了模塊和組件的層級關係以及不同section的內存佔用。","attrs":{}}]}]}],"attrs":{}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"使用該工具可幫助開發者快速評估並優化鏡像的ROM、RAM使用情況。","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"2. 棧估算分析工具","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"棧估算分析工具,主要解決“運行態內存緊缺情況下系統各任務棧的設置”。通過遍歷反彙編文件,計算函數的局部棧開銷並分析函數之間的調用關係,從而估算出任務的棧大小,爲棧溢出分析、棧空間優化提供基礎的數據參考。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"該工具提供函數調用關係圖、函數總的最大棧開銷、內部開銷,並提供展示函數所在具體位置。棧分析結果按照函數列表和調用關係進行展示。","attrs":{}}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"Function List:","attrs":{}},{"type":"text","text":"函數列表界面顯示每個函數的函數名稱和函數內部棧開銷,如圖3所示。","attrs":{}}]}]}],"attrs":{}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/dc/dc093b0ded5fdc79081d24443fb66ab6.webp","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":10}}],"text":"圖3 Function List","attrs":{}}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"Call Graph:","attrs":{}},{"type":"text","text":"調用關係界面顯示每個函數的調用關係,包括函數名稱、調用深度、函數最大棧開銷。","attrs":{}}]}]}],"attrs":{}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"使用該工具可幫助開發者減少爆棧風險,節省內存優化棧空間。","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"3. 性能分析工具","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"性能分析工具,主要解決“性能瓶頸的定位及優化”。基於事件採樣統計的原理,實現熱點函數、熱點路徑的分析,助力識別性能瓶頸。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"該工具提供計數模式及採樣模式兩種工作模式,採集事件發生的次數及執行時間以及上下文如PC,回溯棧等,用於解析出熱點函數與熱點路徑等信息。同時,該工具還支持3種類型的採樣事件:","attrs":{}}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"硬件PMU事件:","attrs":{}},{"type":"text","text":"如cycle,cache等。","attrs":{}}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"軟件打點採樣:","attrs":{}},{"type":"text","text":"如中斷、內存申請等。","attrs":{}}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"高精度週期事件:","attrs":{}},{"type":"text","text":"即按固定週期採樣,精度us級。支持熱點函數及熱點路徑的查看。","attrs":{}}]}]}],"attrs":{}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/a5/a5545493a0d3dd9a27ba61ed5367f1cc.webp","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":10}}],"text":"圖4 性能分析工具界面","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"使用該工具可幫助開發者快速有效識別性能瓶頸,輔助系統性能優化。","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"4. 可視化Trace工具","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"可視化Trace工具,主要解決“程序運行不符合預期情況下的問題定位”。通過採用靜態代碼樁和緩衝區記錄的方式,在樁被執行時,獲取事件發生的上下文、系統任務等信息,並記錄到緩衝區,幫助開發者瞭解何時何處發生的什麼事件。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"該工具以圖形界面展示事件詳情、CPU佔比、內存趨勢圖、任務切換軌跡等信息。下面是Trace 可視化的4個界面:","attrs":{}}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"事件信息視圖:","attrs":{}},{"type":"text","text":"如圖5所示。使用自然語言解釋系統何時(時間戳)何處(在哪個CPU的那個任務中)發生的具體事件。","attrs":{}}]}]}],"attrs":{}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/82/824edfe311e0644b58f9e438d1910bc0.webp","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":10}}],"text":"圖5 時間信息視圖","attrs":{}}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"任務軌跡視圖:","attrs":{}},{"type":"text","text":"如圖6所示。以系統時間爲縱座標,展示任務切換的軌跡,如圖,不同顏色表示不同的任務,不同色塊的遷移對應一次任務切換,點擊色塊會顯示導致任務切換的原因,色塊的長度對應其運行的時長。","attrs":{}}]}]}],"attrs":{}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/da/da48555494e4ad90bb8b98958c4091d3.webp","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":10}}],"text":"圖6 任務軌跡視圖","attrs":{}}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"CPU負載視圖:","attrs":{}},{"type":"text","text":"如圖7所示。統計任意時間段內的任務執行cpu佔比,不同顏色對應不同的任務。","attrs":{}}]}]}],"attrs":{}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/6b/6bb3b5c060e403f85a4454269082c2ba.webp","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":10}}],"text":"圖7 CPU負載視圖","attrs":{}}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"內存監控視圖:","attrs":{}},{"type":"text","text":"如圖8所示。以系統時間爲橫座標,展示隨時間變化的系統內存使用情況。","attrs":{}}]}]}],"attrs":{}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/b6/b6097091ebf9261b7910930891a655eb.webp","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":10}}],"text":"圖8 內存監控視圖","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"使用該工具可幫助開發者清晰的瞭解系統運行的軌跡,更好的理解系統、輔助定位死機死鎖問題。","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"5. 輕量級內存檢測工具","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"輕量級內存檢測工具,主要解決“一鍵定位內存問題”。該工具基於影子內存映射和標記的原理,可快速解決內存越界訪問、釋放後訪問、多重釋放等疑難雜症,並且在檢測到錯誤後實時打印回溯棧。如圖9所示,輕量級內存檢測工具結合backtrace,快速一鍵式定位問題代碼段。","attrs":{}}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/10/107d97d3d82b599c8e07b24ef08b6fc0.webp","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":10}}],"text":"圖9 定位到出錯的代碼行號","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"使用該工具可幫助開發者根據回溯棧一鍵定位到出錯的代碼行號。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"以上就是本期全部內容,相信五大法寶定能讓你在鴻蒙智聯設備開發的道路上披荊斬棘,趕快點擊下方鏈接下載試用吧!","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"size","attrs":{"size":10}}],"text":"HUAWEI DevEco Device Tool 3.0 Beta1下載鏈接:","attrs":{}},{"type":"link","attrs":{"href":"https://device.harmonyos.com/cn/develop/ide#download_beta","title":"","type":null},"content":[{"type":"text","text":"https://device.harmonyos.com/cn/develop/ide#download_beta","attrs":{}}]}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章