1.5 工具與調(diào)試
調(diào)試 Flutter 應(yīng)用
有很多工具和特性可以幫助調(diào)試 Flutter 應(yīng)用程序跃赚,如下列舉了一些:
開發(fā)者工具僚楞,是一套運(yùn)行在瀏覽器的性能及分析工具别凤。
Android Studio/IntelliJ 和 VS Code(借助 Flutter 和 Dart 插件)支持內(nèi)置的源代碼調(diào)試器偎行,可以設(shè)置斷點(diǎn),單步調(diào)試,檢查數(shù)值蛤袒。
Flutter inspector熄云,是開發(fā)者工具提供的 widget 檢查器,也可直接在 Android Studio 和 IntelliJ 中使用(借助 Flutter 插件)妙真。檢查器可以可視化展現(xiàn) widget 樹缴允,查看單個(gè) widget 及其屬性值,開啟性能圖層珍德,等等练般。
開發(fā)者工具
DevTools
要調(diào)試及分析應(yīng)用,開發(fā)者工具可能是你的首選锈候。開發(fā)者工具運(yùn)行在瀏覽器薄料,支持以下特性:
源代碼調(diào)試器
widget 檢查器,展示可視化的 widget 樹泵琳; “widget select” 模式摄职,在應(yīng)用中選擇一個(gè) widget,會(huì)在 widget 樹直接定位到它的位置获列。
內(nèi)存分析
時(shí)間線視圖谷市,支持跟蹤,導(dǎo)入及導(dǎo)出跟蹤信息
-
日志視圖
logging view
如果你在 debug 模式 或 profile 模式 運(yùn)行击孩,那么可以在瀏覽器打開開發(fā)者工具連接到你的應(yīng)用迫悠。開發(fā)者工具不能用在以 release 模式 編譯的應(yīng)用,因?yàn)檎{(diào)試和分析信息都被刪除了巩梢。
如果你要用開發(fā)者工具分析應(yīng)用创泄,需確保使用 profile 模式。否則且改,分析的主要輸出將會(huì)是用于驗(yàn)證框架中各種不變式的調(diào)試斷言(查看 debug 模式斷言)验烧。
想獲取更多信息,請(qǐng)查看 開發(fā)者工具 文檔又跛。
設(shè)置斷點(diǎn)
要設(shè)置斷點(diǎn)碍拆,可以直接在 IDE 或編輯器(比如 Android Studio/IntelliJ 和 VS Code)、開發(fā)者工具調(diào)試器 設(shè)置慨蓝,或者 通過編碼的方式設(shè)置感混。
Dart 分析器
The Dart analyzer
如果你使用的是 Flutter 推薦的 IDE 或編輯器,則自帶的 Dart 分析器默認(rèn)會(huì)檢查代碼礼烈,并發(fā)現(xiàn)可能的錯(cuò)誤弧满。
如果你使用命令行,則可以使用 flutter analyze
檢查代碼此熬。
Dart 分析器非常依賴你在代碼中添加的類型注解庭呜,以幫助跟蹤問題滑进。建議您在各個(gè)地方都加上注解(避免 var
,無類型參數(shù)募谎,無類型 list 字面量扶关,等等),因?yàn)檫@是跟蹤問題最快且最不痛苦的方式数冬。
日志
Logging
另一個(gè)有用的調(diào)試工具是日志节槐。通過 編碼 配置日志,然后在開發(fā)者工具中的 日志視圖 或控制臺(tái)查看輸出拐纱。
調(diào)試應(yīng)用層
Flutter 采用分層架構(gòu)铜异,包括 widget、渲染和繪制等層秸架。想獲取更多信息和視頻揍庄,請(qǐng)查看 GitHub wiki 上的 The Framework architecture,和社區(qū)文章 The Layer Cake咕宿。
Flutter widget 檢查器提供了 widget 樹的視覺展現(xiàn)币绩,如果你想要更多細(xì)節(jié),或關(guān)于 wiget府阀、層級(jí)或渲染樹的詳盡文本轉(zhuǎn)儲(chǔ)缆镣,請(qǐng)查看 添加輸出代碼的方式調(diào)試 Flutter 應(yīng)用 頁面的 調(diào)試標(biāo)志:應(yīng)用層 部分。
Debug 模式斷言
Debug mode assertions
在開發(fā)過程中试浙,強(qiáng)烈建議您使用 Flutter 的 debug 模式董瞻。如果你是用 Android Studio 的 bug 圖標(biāo)運(yùn)行,或者在命令行執(zhí)行 flutter run
田巴,則默認(rèn)會(huì)使用 debug 模式钠糊。有些工具通過 --enable-assets
命令行標(biāo)志可以支持?jǐn)嘌哉Z句。
在此模式壹哺,Dart 斷言語句被開啟抄伍,F(xiàn)lutter 框架在執(zhí)行時(shí)會(huì)計(jì)算每一個(gè)遇到的斷言語句的參數(shù),當(dāng)結(jié)果是 false 時(shí)拋出異常管宵。如此一來截珍,開發(fā)者可以控制不變式檢查的開啟或關(guān)閉,相應(yīng)的性能損耗將只發(fā)生在調(diào)試期間箩朴。
有不變式被違反時(shí)岗喉,它會(huì)被報(bào)告給控制臺(tái),并攜帶一些幫助跟蹤問題源的上下文信息炸庞。
想獲取更多信息钱床,請(qǐng)查看 探索 Dart 語言 中的 [斷言][Assert] 部分。
For more information, see Assert
in the Dart language tour.