工具與調(diào)試

1.5 工具與調(diào)試

調(diào)試 Flutter 應(yīng)用

有很多工具和特性可以幫助調(diào)試 Flutter 應(yīng)用程序,如下列舉了一些:

  • 開發(fā)者工具,是一套運(yùn)行在瀏覽器的性能及分析工具。

  • Android Studio/IntelliJVS 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/IntelliJVS 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.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容