超詳細:用圖詮釋Android Studio除錯技巧
在之前的 Android Studio實用快捷鍵,帶你高效編碼! 一文中,我根據自己在實際開發中的使用場景,列舉了能夠讓我們提升效率的快捷鍵,如果你還沒看,建議你看一下,畢竟我列舉的都是自己用的,很實在,同時也歡迎你能夠補充。同時,在那篇文章的 除錯 快捷鍵部分,我推薦大家專門找幾篇除錯的文章看看,因為除錯在日常開發中真的很重要,相信懂的人自然明白!
今天的文章,我要記錄的就是有關除錯的技巧,不論你是否已經掌握,都值得一看。對了,文章的截圖是我利用下班時間整理的,所以一般會很晚回去,到家都是十點半左右,因為時間還是比較倉促的,有些地方遺漏或者不正確的,歡迎指正!下面進入正題。
1. 除錯視窗
先來一張大圖,途中詳細標註了除錯視窗中,各個常用的功能區域和按鍵。如果你覺得圖片看不清,可以選擇在單獨的標籤頁開啟,然後放大看(實在不行,可以留下郵箱我單獨發)。
圖中我把整個除錯介面分了5個區域,每個區域作用各不相同,而且有些說明不是很到位,下面再針對個別地方補充一下:
1.1 調整Debug視窗(可選)
可能大家 AS 的Debug 窗口布局跟我的不一樣,我習慣於我現在的模式,想看啥都方便。其實你也可以自己調節的,見下圖:
1.2 A區
執行到游標處
:這個按鍵在圖示中說的有點亂,再補充幾句,然後來一張圖。程式debug過程中,有時候我們想直接讓程式直接debug到某處,這時就可以使用該按鍵。與之相輔的還有強制執行到游標處
使用
和 區別
可以看下圖。
計算表示式
:有關計算表示式,再單獨補充一張使用說明書,哈哈。
1.3 C區
C區分為Frames
和 Threads
,各自功能已經在大圖中介紹了。說實話,C區我用的很少,實際的作用我說不上來幾個,但有一個作用我還是要推薦給你們。
在實際開發中,一個專案比較大,好多人維護,有些不是你寫的介面你肯定不熟悉入口在哪。當然,你可以選擇在問這是誰開發的,找到他然後問他入口在哪,但是我不建議這麼做,原因有二:其一,這麼簡單的問題你去問別人?其二,別人很忙,我想身為程式設計師的你,也不想被人隨便打斷吧。其實我就這麼一說,要是大家都去直接問,我還用接著往下說嗎?(笑cry)
既然不問,那就自己找,其實真的一點都不麻煩。我們在專案中肯定有基類 BaseActivity
吧,然後每個介面Act都會繼承該基類。那麼就好辦了。在 BaseActivity
的 onCreate()
方法中打個斷點,然後點進你想找入口類的那個介面,這時候,斷點停在 BaseActivity
的 onCreate()
方法中了。接下來,把目光轉到C區 Frames
標籤頁面,看看你能發現什麼?為了更形象,我準備了一張圖,直接上圖,我也不用繼續往下說了:
1.3 D區和E區
D區和E區圖示不是很形象,再補充一下。
我們一般會在D區觀察變數的值,但除此之位,我們可以根據除錯需要隨時修改變數的值。舉個栗子,有個boolean值,是服務端返回的,我們拿到這個值,會根據 true
或者 false
做不同的處理,然而服務端總是返回 true
,我們想驗證 false
的情形怎麼辦?當然你可以加一行程式碼強制改一下,事後再刪除,但我想說這樣很 low(雖然我以前也這麼幹)。這時候你就可以在變數區找到這個變數,方法有2個,原理都一樣:其一,使用前面說“計算表示式”;其二,點選變數,右擊選擇 set value...
(win快捷鍵F2)。
有時候,D區變數很多,而我們關心的往往只是那麼一兩個變數,這時候,你就需要 Watches
功能,將你感興趣的變數新增到 Watches
視窗,單獨觀察(VIP待遇)。新增的方法有2個,原理還是一樣:其一,在D區右擊變數,選擇 Add to Watches
;其二,在 E 區點選左上角 +,輸入變數名。
2. 斷點技巧
這塊直接上圖,要上班來不及了哈哈,途中已經很形象的說明了。至於實際的使用場景,我會盡可能提示,最終還是要靠自己去實踐哈。
2.1 條件斷點
顧名思義,帶有條件的斷點,一般在迴圈時用的比較多。
2.2 日誌斷點
如果我們很關心某個變變數的變化過程,一般會使用Log列印一堆值來觀察,觀察完了再刪除,說真的有點麻煩。這時候,你需要日誌斷點,看圖:
圖中最後那句“而不是 Message”視窗,改成“而不是 Android Monitor 視窗”。
2.3 異常斷點
所謂異常斷點,是用來監聽程式中的異常,一旦程式崩潰,會直接定位到異常所在的確切位置。我個人覺得這個有點雞肋,因為崩潰日誌裡面會帶有出錯程式碼的行號,也能夠直接定位。或者說我還沒有發現他真正強大的作用吧,我只能這麼安慰自己。
下面我們以監聽程式中執行時異常為例,意思就是在debug過程中,一旦程式崩潰,無論你在哪,AS 會幫助我們立馬定位到崩潰的位置。看圖,分三步:
第一步,調出“breakpoints”斷點管理介面(win快捷鍵Ctrl + Shift + F8):
第二步,新增我們感興趣的異常斷點,以新增 RuntimeException
為例:
第三步,故意設雷,驗證一下。其實此處是 NullPointerException
,但看原始碼知道 NullPointerException extends RuntimeException
,所以一樣會捕獲:
3. 結束
OK,大概就這些,寫完發現又沒時間睡覺了,校審一遍沒什麼大問題。希望本文能對你有所幫助,如果本文有任何錯誤,或者有更好的想法,歡迎一起交流學習!