Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android開發工具----Android Studio調試技巧

Android開發工具----Android Studio調試技巧

編輯:關於Android編程

0.前言

Android Studio目前已經成為開發Android的主要工具,作為開發者,調試、發現並解決BUG是家常便飯。正所謂,工欲善其事必先利其器,今天我們就來看看Android Studio中的調試技巧。

1.調試面板

首先,來看看Android studio中為我們提供的調試面板(標准情況下):這裡寫圖片描述

點擊右上角Restore ‘Threads’View可先展示目前相關的線程信息:

這裡寫圖片描述

2.單步調試區

2.1Show Execution Point這裡寫圖片描述

點擊該按鈕,光標將定位到當前正在調試的位置。

2.2 Force Step Into這裡寫圖片描述

強制單步跳入,和step into功能類似。

主要區別在於:如果當前行有任何方法,不管該方法是我們自行定義還是類庫提供的,都能跳入到方法內部繼續執行。

2.3 Drop Frame這裡寫圖片描述

中斷執行,並返回到方法被調用處,在這個過程中該方法對應的棧幀會從棧中移除。並且所有上下文變量的值也恢復到該方法未執行時的狀態。

2.4 Force Run to Cursor這裡寫圖片描述

非常好用的一個功能,可以忽視已經存在的斷點,跳轉到光標所在處。

3.求值表達式

Evaluate expression這裡寫圖片描述

點擊該按鈕會在當前調試的語句處嵌入一個交互式解釋器,在該解釋器中,你可以執行任何你想要執行的表達式進行求值操作。

比如,我們在調試時執行到以下代碼:

這裡寫圖片描述

此時執行EvaluateExpression,在該解釋器中我們能做什麼呢?在這裡,我們可以對result進行求值操作:右鍵要求值,選擇evaluate Expression。此時會顯示如下:

這裡寫圖片描述

在彈出的輸入框中輸入求值表達式,比如這裡我們輸入Math.min(result,50),如下圖:

這裡寫圖片描述

點擊執行,我們發現在Result中已經輸出了結果,如下:

這裡寫圖片描述

3.斷點管理區

3.1 Return這裡寫圖片描述

點擊該按鈕會停止目前的應用,並且重新啟動。用於想重新調試時。

3.2 Pause Program這裡寫圖片描述

點擊該按鈕將暫停應用的執行,如果想要恢復則可以使用下面提到的Resume Program。

3.3 Resume Program這裡寫圖片描述

該操作有恢復應用的含義,但是卻有兩種行為:
1. 在應用處在暫停狀態下,點擊該按鈕將恢復應用運行;
2. 在很多情況下,我們會設置多個斷點以便調試。在某些情況下,我們需要從當前斷點移動到下一個斷點,兩個斷點之間的代碼自動被執行,這樣我們就不需要一步一步調試到下一個斷點了,省時又省力。

3.4 Stop這裡寫圖片描述

(1)對普通的Java項目,點擊該按鈕意味著退出調試模式,但是應用還會執行完成;

(2)而在Android項目中,點擊該按鈕,則意味這APP結束運行。

3.5 View Breakpoints這裡寫圖片描述

點擊該按鈕會進入斷點管理界面,在這裡你可以查看所有斷點,管理或者配置斷點的行為,如刪除,修改屬性信息等:

這裡寫圖片描述

3.6 Mute Breakpoints這裡寫圖片描述

使用該按鈕來切換斷點的狀態:啟動或者禁用。

在調試過程中,你可以暫時禁用所有的斷點,以實現應用正常的運行。該功能非常有用,比如當你在調試過程中,突然不想讓斷點干擾你所關心的流程時,可以臨時禁用斷點。

3.7 Get thread dump這裡寫圖片描述

獲取線程Dump,點擊該按鈕將進入線程Dump界面。

這裡寫圖片描述

線程工具區中最常用的是這裡寫圖片描述,可以用來過濾線程,其他的不做解釋了。

接下來我們來認識一下線程的類型,表示為不同的圖標:


線程狀態描述 圖標 Thread is suspended. 這裡寫圖片描述 Thread is waiting on a monitor lock. 這裡寫圖片描述 Thread is running. 這裡寫圖片描述 Thread is executing network operation, and is waiting for data to be passed. 這裡寫圖片描述 Thread is idle. 這裡寫圖片描述 Event Dispatch Thread that is busy. 這裡寫圖片描述 Thread is executing disk operation.

這裡寫圖片描述

3.8 Settings這裡寫圖片描述

點擊該按鈕將打開有關設置的列表:

這裡寫圖片描述

3.8.1 Show Values lnline

調試過程中開啟該功能,將會在代碼右邊顯示變量值,即下圖中紅框所示部分:

這裡寫圖片描述

3.8.2 Show MethodReturn Values

調試過程中啟用該功能,將在變量區顯示最後執行方法的返回值。

舉個例子來說,首先,關閉該功能,我們調試這段代碼並觀察其變量區:

這裡寫圖片描述

開啟該功能之後,再來觀察變量區的變化:

這裡寫圖片描述

繼續往下調試:

這裡寫圖片描述

這個功能簡直是棒極了!在調試一段代碼,並想看該代碼中最後調用方法的最終結果時就非常有用了。

3.8.3 Auto-VariablesMode

開啟這個功能後,idea的Debugger會自動評估某些變量,大概就是當你執行在某個斷點時,Debugger會檢測當前調試點之前或者之後的變量的狀態,然後在變量區選擇性輸出。

舉個例子來說明,未開啟該功能之前,變量區輸出所有的變量信息:

這裡寫圖片描述

開啟之後,當你調試到第13行時,Debugger檢測到num變量在之後沒有被使用,那麼在變量區就不會輸出該變量的信息。

這裡寫圖片描述

3.8.4 Sort valuesalphabetically

開啟這個功能後,變量區中的輸出內容會按照按字母順序進行排序,不常用,還是按照默認的順序好。

3.9 Help這裡寫圖片描述

這個不用說了,有任何不明白的都可以查看官方幫助文檔。

其他幾個操作:Settings、Pin、Close留給各位自己去使用。

4.修改變量值

在調試過程中,我們可以方便的修改某個變量的值,如下:

這裡寫圖片描述

在上圖中,當前result的值經過計算為10,這裡我們通過Set Value將其計算結果修改為100。

5.變量觀察區

該區域將顯示你所感興趣的變量的值。

在調試模式下,你可以通過Add to Watches將某個變量添加到觀察區,操作如下:

這裡寫圖片描述

這裡我們對name比較感興趣,希望看到它的值的變化情況,因此我們將其“特殊關照”。

需要注意,此時因為name是成員變量,因此在對象觀察區也可看到該值。如果是局部變量,無疑只能用這種方式了。

6.斷點

6.1 條件斷點

所謂條件斷點就是在特定條件發生的斷點,也就是,我們可將某個斷點設置為只對某種事件感興趣,最典型的應用就是在列表循環中,我們希望在某特定的元素出現時暫停程序運行。比如,現在我們有個list中,其中包含了q,1q,2q,3q四個元素,我們希望在遍歷到2q時暫停程序運行,那麼需要進行如下操作:

在需要的地方添加斷點,如下:

這裡寫圖片描述

斷點處左鍵單擊,在Condition處填寫過濾條件.此處我們只關心2q,因此填寫s.equals("2q")

這裡寫圖片描述

6.2 日志斷點

該類型的斷點不會使程序停下來,而是在輸出我們要它輸出的日志信息,然後繼續執行。

具體操作如下:同樣在斷點處左鍵單擊,在彈出的對話框中取消選中Suspend。

這裡寫圖片描述

在彈出的控制面板中,選中Log evaluated expression,然後再填寫想要輸出的日志信息,如下:

這裡寫圖片描述

當調試過程遇到該斷點將會輸出結果,如下:

這裡寫圖片描述

6.3 異常斷點

所謂的異常斷點就是在調試過程中,一旦發生異常,則會立刻定位到異常拋出的地方。

比如在調試異常中,我們非常關注運行時異常,希望在產生任何運行異常時及時定位,那麼此時就可以利用該類型異常,在上線之前,進行異常斷點調試非常有利於減少正式環境中發生crash的幾率。

具體操作如下:在Run菜單項中,選擇ViewBreakpoints,如下:

這裡寫圖片描述

在管理斷點面板中,點擊+

這裡寫圖片描述

在彈出的下拉選擇列表中,我們選擇Java ExceptionBreakpoints。

這裡寫圖片描述

這裡我們選中Search By Name,在下面的輸入框中輸入我們所關心的異常類型。

此處我們關心NullPointerException,在調試過程一旦發生NullPointerException,調試器就會定位到異常發生處。

這裡寫圖片描述

6.4 方法斷點這裡寫圖片描述

傳統的調試方式是以行為單位的,所謂單步調試;但是很多時候我們關心的是某個函數的參數,返回值;(回想一下我們使用日志的時候打印的最多的信息難道不是函數的參數和返回值嗎?)使用方法斷點,我們可以在函數級別進行調試;如果經常跳進跳出函數或者只對某個函數的參數感興趣,這種類型的斷點非常實用。具體使用方法有兩種方式;最簡單的是在你感興趣的方法頭那一行打上斷點。

6.5 Field WatchPoint這裡寫圖片描述

Filed WatchPoint是本質上是一種特殊的斷點,也稱為屬性斷點:當我們某個字段值被修改的時候,程序暫停在修改處。通常在調試多線程時尤為可用,能幫我們及時的定位並發錯誤的問題。其使用和添加普通的斷點並無不同,斷點圖標稍有不同。

7.調試的兩種方式

這裡寫圖片描述

到目前,調試的相關基礎我們已經介紹完了,但是不少同學對Android Studio中這兩個按鈕感到困惑:Debug和Attach process。
這裡我們就簡單介紹一下這兩者的區別:

Debug:以調試模式安裝運行,斷點可以在運行之前設置,也可在運行後設置,是多數人最常用的調式方式

Attach process:和Debug方式相比,能夠將調試器attach到任何正在運行的進程。比如,我們可以通過attach process到想要調試的進程。然後,在需要的地方設置相關斷點即可。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved