Android Studio Debug 的 9 個小技巧

週末看 Android Dev Summit '19 的視頻的時候,看到一章關於 Android Studio Debug 的介紹,有不少平常很是有用的小技巧,學習了這些小技巧能很大程度的下降咱們 Debug 的成本,快速定位問題的本質,今天就向你們介紹一下 Android Studio Debug 的 9 個小技巧。

沒關注的小夥伴記得關注訂閱😝,若是以爲這些文章有點意思,記得分享轉發評論點贊😝!express

1. Log 過濾和摺疊

有時候 Logcat 中 log 的信息很長,同時還有些咱們不須要的信息也打印出來,例以下圖中的【時間+線程 ID】。 markdown

這個時候咱們能夠點擊 Logcat 窗口上的【設置】按鈕,設置一條 Log 須要顯示哪些關鍵信息,可設置的項有:時間、線程ID、包名、Tag name。咱們能夠根據本身的須要控制顯示,而且下面還會有一條 Sample Log 提供設置後的預覽效果,就像下圖中這樣。

平常開發的時候咱們還會遇到另外一種狀況,好比根據當前 UI 的渲染狀況,咱們須要時刻打印 UI 的某個值,來幫助咱們觀察 UI,同時當到達某種條件的時候,輸入一條咱們獲得的【結果 log】。也就是說在得到咱們的【結果 log】以前會有不少沒用可是又必須打印的 log,這樣當咱們須要查找【結果 log】的時候就會很是麻煩。 多線程

就像上圖中這樣,咱們的【結果 log】被上下【循環打印 log】包圍了,很難一會兒找出來,這時候咱們能夠選關鍵字【右鍵】,選擇【Fold Lines Like This】,以下圖所示。

這樣咱們相同關鍵字的 log 就會被摺疊,固然也能夠展開查看詳細 log。

2. 自定義斷點執行條件

咱們來看上面這段代碼,經過字面意思咱們能夠得知:這是一個點擊事件執行的方法,點擊發生後經過 NavController 從當前 HomeFragment 跳轉到 EmailFragment。而後咱們在第一行打了一個斷點,咱們已經得知當 email 的 subject 包含 【Bonjour】關鍵字的時候,這段代碼會發生崩潰,反之不包含則不會發生崩潰,因此咱們不須要每次斷點都生效。學習

這裏咱們能夠右鍵斷點,在 Condition 裏輸入咱們的條件判斷語句,當條件容許的時候,斷點才生效。條件語句的代碼支持 Kotlin 和 Java 兩種語言的寫法,以下圖所示。lua

而後若是咱們想在跳轉到 EmailFragment 以後進一步去追蹤問題,因而我在 EmailFragment 的 onCreate 方法打了一個斷點(以下圖所示),而後這裏還會遇到咱們以前說的問題:不符合條件的時候斷點也會生效,這時候咱們該怎麼辦呢? spa

咱們能夠在這個斷點上面,右鍵、點擊更多。線程

左邊選擇當前斷點以後,在右邊點擊【Disable until breakpoint hit】,選擇咱們以前有條件判斷的斷點,那麼這個新的斷點會在它所跟隨的斷點生效以後纔會生效。debug

3. 掛起線程

當咱們右鍵任意一個斷點的時候,會有一個 Suspend 選項【All、Thread】,All 也就意味着當咱們在一個多線程的應用中 debug 問題的時候,一旦這個斷點生效,全部的線程都會被掛起,Thread 表示只掛起當前線程。因此當咱們在某個後臺線程中 debug 問題的時候就能夠選擇 Thread,這樣就不會在 debug 的時候阻塞主線程的正常功能。3d

還有一個打開關閉斷點的快捷鍵也分享一下:Windows 用戶 Alt + Click ,Mac Option + Click 。調試

4. 動態打印

詳細不少人包括我以前在 debug 的時候,都會在須要 debug 的地方增長 print 輸出一下信息供本身排查錯誤,這裏提供一種快捷方便的方法,能夠既不污染咱們的代碼,又能夠隨時輸出任意信息。

如上圖所示,在須要打印的地方增長斷點,而後取消全部線程的掛起,選擇【Evaluate and log】,屬於咱們須要打印的語句,當代碼執行到斷點的時候,不會暫停,而會根據咱們設置的打印信息輸出 log,是否是很方便?

5. 斷點分組

一般遇到一個問題的時候,咱們須要增長不少斷點去追蹤問題的緣由,當問題解決以後,每每會忘記取消這些斷點,致使在某次調試的時候,設備會被以前的斷點所暫停,會讓咱們很無語。這裏咱們能夠 debug 的時候在某個斷點上:右鍵、更多,而後選擇這個問題全部相關的斷點,將它們分到同一個 Group 裏面,那麼這一個組的斷點就能夠統一開關、統一刪除。

6. 斷點上一步

說到這個真的很痛心,經常由於本身在 debug 的時候,因爲下一步點擊的太快了而錯過了問題關鍵行,只能從新運行一次代碼,從新 debug 而後本身一次次點擊下一步。

在運行 Android 10 的設備上,debug 界面中提供了一個叫【Drop frame】的按鈕,能夠供咱們跳出當前方法棧,返回上一步,這樣就會避免咱們由於錯過斷點而不得不從新運行代碼。

7. 觀察對象

當咱們 debug 的時候,能夠從 debug 窗口中觀察當前做用域中的對象以及對象的屬性,有時候咱們會觀察在不一樣頁面是不是同一個對象,以前個人作法很粗暴...就是找張紙,把這個對象的 ID 記下來,而後在另外一個頁面 debug 看 ID 是否一致😂

這裏咱們能夠在對象上右鍵、選擇【Mark Object】以後會讓你自定義一個 Label,而後在整個 debug 期間,相同的對象會以你設置的 Label 爲 name 出現,幫助咱們方便的分析是不是統一對象。

順便提一下,在任意一段代碼上,點擊行號,能夠從當前斷點快速執行到目標行並暫停,這個我真是第一次知道,感受以前 Android Studio 都白用了😭

並且在 debug 的時候咱們能夠選擇 debug 窗口中的【Evaluate expression】按鈕來動態觀察對象,點擊以後會彈出一個計算框,咱們能夠輸入任意當前做用域中的對象以及屬性觀察。

不得不說這個真的很方便,之前遇到這種狀況我只有一種方法就是:print 😂,固然這裏不只僅是觀察對象,咱們能夠寫任意代碼觀察咱們想要的值,就像下圖這樣。

8. 增量更新

我試了一下,這兩個按鈕是真的很好用啊,比從新全量運行應用真是快了很多,很是方便。

9. 錯誤棧分析

一般咱們 App 中會繼承一下線上 bug 反饋的 SDK 好比 bugly,在 bugly 咱們會獲得崩潰的異常棧信息,相似下圖這樣。

咱們能夠全選複製,打開咱們的 Android Studio,選擇 Analyze → Analyze Stack Trace or Thread Dump,而後把異常棧信息粘貼進去,點擊肯定。

Android Studio 會在控制檯顯示這段異常棧信息,而且與現有代碼 Link 在一塊兒,咱們能夠點擊跳轉到問題所在行。

好了這就是今天要分享的所有內容,關於更多詳細的內容,你們能夠點擊【閱讀原文】在油管上查看,真但願有大佬能夠出一個【Android Studio 使用全攻略】,感受本身對 AS 真的只是會用,但還有不少東西須要去學習和探索。😂

我是 wanbo 你們加油!

沒關注的小夥伴記得關注訂閱😝,若是以爲這些文章有點意思,記得分享轉發評論點贊😝!

相關文章
相關標籤/搜索