沒關注的小夥伴記得關注訂閱😝,若是以爲這些文章有點意思,記得分享轉發評論點贊😝!express
有時候 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。咱們來看上面這段代碼,經過字面意思咱們能夠得知:這是一個點擊事件執行的方法,點擊發生後經過 NavController 從當前 HomeFragment 跳轉到 EmailFragment。而後咱們在第一行打了一個斷點,咱們已經得知當 email 的 subject 包含 【Bonjour】關鍵字的時候,這段代碼會發生崩潰,反之不包含則不會發生崩潰,因此咱們不須要每次斷點都生效。學習
這裏咱們能夠右鍵斷點,在 Condition 裏輸入咱們的條件判斷語句,當條件容許的時候,斷點才生效。條件語句的代碼支持 Kotlin 和 Java 兩種語言的寫法,以下圖所示。lua
而後若是咱們想在跳轉到 EmailFragment 以後進一步去追蹤問題,因而我在 EmailFragment 的 onCreate 方法打了一個斷點(以下圖所示),而後這裏還會遇到咱們以前說的問題:不符合條件的時候斷點也會生效,這時候咱們該怎麼辦呢? spa
咱們能夠在這個斷點上面,右鍵、點擊更多。線程
左邊選擇當前斷點以後,在右邊點擊【Disable until breakpoint hit】,選擇咱們以前有條件判斷的斷點,那麼這個新的斷點會在它所跟隨的斷點生效以後纔會生效。debug
當咱們右鍵任意一個斷點的時候,會有一個 Suspend 選項【All、Thread】,All 也就意味着當咱們在一個多線程的應用中 debug 問題的時候,一旦這個斷點生效,全部的線程都會被掛起,Thread 表示只掛起當前線程。因此當咱們在某個後臺線程中 debug 問題的時候就能夠選擇 Thread,這樣就不會在 debug 的時候阻塞主線程的正常功能。3d
還有一個打開關閉斷點的快捷鍵也分享一下:Windows 用戶 Alt + Click ,Mac Option + Click 。調試
詳細不少人包括我以前在 debug 的時候,都會在須要 debug 的地方增長 print 輸出一下信息供本身排查錯誤,這裏提供一種快捷方便的方法,能夠既不污染咱們的代碼,又能夠隨時輸出任意信息。
如上圖所示,在須要打印的地方增長斷點,而後取消全部線程的掛起,選擇【Evaluate and log】,屬於咱們須要打印的語句,當代碼執行到斷點的時候,不會暫停,而會根據咱們設置的打印信息輸出 log,是否是很方便?
說到這個真的很痛心,經常由於本身在 debug 的時候,因爲下一步點擊的太快了而錯過了問題關鍵行,只能從新運行一次代碼,從新 debug 而後本身一次次點擊下一步。
在運行 Android 10 的設備上,debug 界面中提供了一個叫【Drop frame】的按鈕,能夠供咱們跳出當前方法棧,返回上一步,這樣就會避免咱們由於錯過斷點而不得不從新運行代碼。
當咱們 debug 的時候,能夠從 debug 窗口中觀察當前做用域中的對象以及對象的屬性,有時候咱們會觀察在不一樣頁面是不是同一個對象,以前個人作法很粗暴...就是找張紙,把這個對象的 ID 記下來,而後在另外一個頁面 debug 看 ID 是否一致😂
這裏咱們能夠在對象上右鍵、選擇【Mark Object】以後會讓你自定義一個 Label,而後在整個 debug 期間,相同的對象會以你設置的 Label 爲 name 出現,幫助咱們方便的分析是不是統一對象。
順便提一下,在任意一段代碼上,點擊行號,能夠從當前斷點快速執行到目標行並暫停,這個我真是第一次知道,感受以前 Android Studio 都白用了😭
並且在 debug 的時候咱們能夠選擇 debug 窗口中的【Evaluate expression】按鈕來動態觀察對象,點擊以後會彈出一個計算框,咱們能夠輸入任意當前做用域中的對象以及屬性觀察。
不得不說這個真的很方便,之前遇到這種狀況我只有一種方法就是:print 😂,固然這裏不只僅是觀察對象,咱們能夠寫任意代碼觀察咱們想要的值,就像下圖這樣。
一般咱們 App 中會繼承一下線上 bug 反饋的 SDK 好比 bugly,在 bugly 咱們會獲得崩潰的異常棧信息,相似下圖這樣。
咱們能夠全選複製,打開咱們的 Android Studio,選擇 Analyze → Analyze Stack Trace or Thread Dump,而後把異常棧信息粘貼進去,點擊肯定。
Android Studio 會在控制檯顯示這段異常棧信息,而且與現有代碼 Link 在一塊兒,咱們能夠點擊跳轉到問題所在行。
好了這就是今天要分享的所有內容,關於更多詳細的內容,你們能夠點擊【閱讀原文】在油管上查看,真但願有大佬能夠出一個【Android Studio 使用全攻略】,感受本身對 AS 真的只是會用,但還有不少東西須要去學習和探索。😂
我是 wanbo 你們加油!
沒關注的小夥伴記得關注訂閱😝,若是以爲這些文章有點意思,記得分享轉發評論點贊😝!