1. 程式人生 > >超詳細:用圖詮釋Android Studio除錯技巧

超詳細:用圖詮釋Android Studio除錯技巧

在之前的 Android Studio實用快捷鍵,帶你高效編碼! 一文中,我根據自己在實際開發中的使用場景,列舉了能夠讓我們提升效率的快捷鍵,如果你還沒看,建議你看一下,畢竟我列舉的都是自己用的,很實在,同時也歡迎你能夠補充。同時,在那篇文章的 除錯 快捷鍵部分,我推薦大家專門找幾篇除錯的文章看看,因為除錯在日常開發中真的很重要,相信懂的人自然明白!

今天的文章,我要記錄的就是有關除錯的技巧,不論你是否已經掌握,都值得一看。對了,文章的截圖是我利用下班時間整理的,所以一般會很晚回去,到家都是十點半左右,因為時間還是比較倉促的,有些地方遺漏或者不正確的,歡迎指正!下面進入正題。

1. 除錯視窗

先來一張大圖,途中詳細標註了除錯視窗中,各個常用的功能區域和按鍵。如果你覺得圖片看不清,可以選擇在單獨的標籤頁開啟,然後放大看(實在不行,可以留下郵箱我單獨發)。

概覽

圖中我把整個除錯介面分了5個區域,每個區域作用各不相同,而且有些說明不是很到位,下面再針對個別地方補充一下:

1.1 調整Debug視窗(可選)

可能大家 AS 的Debug 窗口布局跟我的不一樣,我習慣於我現在的模式,想看啥都方便。其實你也可以自己調節的,見下圖:

調處視窗

1.2 A區

執行到游標處:這個按鍵在圖示中說的有點亂,再補充幾句,然後來一張圖。程式debug過程中,有時候我們想直接讓程式直接debug到某處,這時就可以使用該按鍵。與之相輔的還有強制執行到游標處

,二者的 使用區別 可以看下圖。

執行到游標處

計算表示式:有關計算表示式,再單獨補充一張使用說明書,哈哈。

計算表示式

1.3 C區

C區分為FramesThreads ,各自功能已經在大圖中介紹了。說實話,C區我用的很少,實際的作用我說不上來幾個,但有一個作用我還是要推薦給你們。

在實際開發中,一個專案比較大,好多人維護,有些不是你寫的介面你肯定不熟悉入口在哪。當然,你可以選擇在問這是誰開發的,找到他然後問他入口在哪,但是我不建議這麼做,原因有二:其一,這麼簡單的問題你去問別人?其二,別人很忙,我想身為程式設計師的你,也不想被人隨便打斷吧。其實我就這麼一說,要是大家都去直接問,我還用接著往下說嗎?(笑cry)

既然不問,那就自己找,其實真的一點都不麻煩。我們在專案中肯定有基類 BaseActivity 吧,然後每個介面Act都會繼承該基類。那麼就好辦了。在 BaseActivityonCreate() 方法中打個斷點,然後點進你想找入口類的那個介面,這時候,斷點停在 BaseActivityonCreate() 方法中了。接下來,把目光轉到C區 Frames 標籤頁面,看看你能發現什麼?為了更形象,我準備了一張圖,直接上圖,我也不用繼續往下說了:

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 區點選左上角 +,輸入變數名。

D和E

2. 斷點技巧

這塊直接上圖,要上班來不及了哈哈,途中已經很形象的說明了。至於實際的使用場景,我會盡可能提示,最終還是要靠自己去實踐哈。

2.1 條件斷點

顧名思義,帶有條件的斷點,一般在迴圈時用的比較多。

條件斷點

2.2 日誌斷點

如果我們很關心某個變變數的變化過程,一般會使用Log列印一堆值來觀察,觀察完了再刪除,說真的有點麻煩。這時候,你需要日誌斷點,看圖:

日誌斷點

圖中最後那句“而不是 Message”視窗,改成“而不是 Android Monitor 視窗”。

2.3 異常斷點

所謂異常斷點,是用來監聽程式中的異常,一旦程式崩潰,會直接定位到異常所在的確切位置。我個人覺得這個有點雞肋,因為崩潰日誌裡面會帶有出錯程式碼的行號,也能夠直接定位。或者說我還沒有發現他真正強大的作用吧,我只能這麼安慰自己。

下面我們以監聽程式中執行時異常為例,意思就是在debug過程中,一旦程式崩潰,無論你在哪,AS 會幫助我們立馬定位到崩潰的位置。看圖,分三步:

第一步,調出“breakpoints”斷點管理介面(win快捷鍵Ctrl + Shift + F8):

異常斷點-1

第二步,新增我們感興趣的異常斷點,以新增 RuntimeException 為例:

異常斷點-2

第三步,故意設雷,驗證一下。其實此處是 NullPointerException,但看原始碼知道 NullPointerException extends RuntimeException,所以一樣會捕獲:

異常斷點-3

3. 結束

OK,大概就這些,寫完發現又沒時間睡覺了,校審一遍沒什麼大問題。希望本文能對你有所幫助,如果本文有任何錯誤,或者有更好的想法,歡迎一起交流學習!