Android Studio Debug 的 9 個小技巧

Android Studio Debug 的 9 個小技巧

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

沒關注的小夥伴記得關注,如果覺得這些文章有點意思,記得分享轉發評論點贊!

1. Log 過濾和摺疊

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

Android Studio Debug 的 9 個小技巧

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

Android Studio Debug 的 9 個小技巧

日常開發的時候我們還會遇到另一種情況,比如根據當前 UI 的渲染情況,我們需要時刻打印 UI 的某個值,來幫助我們觀察 UI,同時當到達某種條件的時候,輸入一條我們得到的【結果 log】。也就是說在獲得我們的【結果 log】之前會有很多沒用但是又必須打印的 log,這樣當我們需要查找【結果 log】的時候就會非常麻煩。

Android Studio Debug 的 9 個小技巧

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

Android Studio Debug 的 9 個小技巧

這樣我們相同關鍵字的 log 就會被摺疊,當然也可以展開查看詳細 log。

Android Studio Debug 的 9 個小技巧

2. 自定義斷點執行條件

Android Studio Debug 的 9 個小技巧

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

這裡我們可以右鍵斷點,在 Condition 裡輸入我們的條件判斷語句,當條件允許的時候,斷點才生效。條件語句的代碼支持 Kotlin 和 Java 兩種語言的寫法,如下圖所示。

Android Studio Debug 的 9 個小技巧

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

Android Studio Debug 的 9 個小技巧

我們可以在這個斷點上面,右鍵、點擊更多

Android Studio Debug 的 9 個小技巧

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

Android Studio Debug 的 9 個小技巧

3. 掛起線程

Android Studio Debug 的 9 個小技巧

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

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

4. 動態打印

詳細很多人包括我之前在 debug 的時候,都會在需要 debug 的地方增加 print 輸出一下信息供自己排查錯誤,這裡提供一種快捷方便的方法,可以既不汙染我們的代碼,又可以隨時輸出任意信息。

Android Studio Debug 的 9 個小技巧

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

5. 斷點分組

Android Studio Debug 的 9 個小技巧

通常遇到一個問題的時候,我們需要增加很多斷點去追蹤問題的原因,當問題解決之後,往往會忘記取消這些斷點,導致在某次調試的時候,設備會被之前的斷點所暫停,會讓我們很無語。這裡我們可以 debug 的時候在某個斷點上:右鍵、更多,然後選擇這個問題所有相關的斷點,將它們分到同一個 Group 裡面,那麼這一個組的斷點就可以統一開關、統一刪除。

6. 斷點上一步

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

Android Studio Debug 的 9 個小技巧

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

7. 觀察對象

Android Studio Debug 的 9 個小技巧

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

Android Studio Debug 的 9 個小技巧

這裡我們可以在對象上右鍵、選擇【Mark Object】之後會讓你自定義一個 Label,然後在整個 debug 期間,相同的對象會以你設置的 Label 為 name 出現,幫助我們方便的分析是否是統一對象。

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

Android Studio Debug 的 9 個小技巧

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

Android Studio Debug 的 9 個小技巧

不得不說這個真的很方便,以前遇到這種情況我只有一種方法就是:print ,當然這裡不僅僅是觀察對象,我們可以寫任意代碼觀察我們想要的值,就像下圖這樣。

Android Studio Debug 的 9 個小技巧

8. 增量更新

Android Studio Debug 的 9 個小技巧

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

9. 錯誤棧分析

通常我們 App 中會繼承一下線上 bug 反饋的 SDK 比如 bugly,在 bugly 我們會得到崩潰的異常棧信息,類似下圖這樣。

Android Studio Debug 的 9 個小技巧

我們可以全選複製,打開我們的 Android Studio,選擇

Analyze → Analyze Stack Trace or Thread Dump,然後把異常棧信息粘貼進去,點擊確定。

Android Studio Debug 的 9 個小技巧

Android Studio 會在控制檯顯示這段異常棧信息,並且與現有代碼 Link 在一起,我們可以點擊跳轉到問題所在行。

Android Studio Debug 的 9 個小技巧

好了這就是今天要分享的全部內容,關於更多詳細的內容,大家可以關注我,進入我的主頁查看,改天考慮出一個【Android Studio 使用全攻略】,感覺很多人對 AS 真的只是會用,但還有很多東西需要去學習和探索。


感謝大家能耐著性子,看完我囉哩囉嗦的文章。

願與各位在Android開發崗位的同胞們互相交流學習,共同進步!

在這裡我也分享一份自己收錄整理的Android學習PDF+架構視頻+面試文檔+源碼筆記,還有高級架構技術進階腦圖、Android開發面試專題資料,高級進階架構資料幫助大家學習提升進階,也節省大家在網上搜索資料的時間來學習,也可以分享給身邊好友一起學習

如果你有需要的話,可以點贊+評論+轉發關注我,然後私信我【進階】我發給你

Android Studio Debug 的 9 個小技巧

Android Studio Debug 的 9 個小技巧


分享到:


相關文章: