Android Studio斷點除錯詳細步驟
轉載地址:http://blog.csdn.net/huangxiaominglipeng/article/details/53100811
有人說Android 的除錯是最坑的,那我只能說是你不會用而已,我可以說android Studio的除錯是我見過最棒的。
下面會將debug模式和Attach模式的斷點除錯
好了開始寫一個簡單的除錯程式,我們先來一個for迴圈
設定斷點(點選紅點位置新增或取消斷點)
點選debug模式執行
檢視除錯面板
一、簡單除錯
1. step over:一步步往下走
當前程式執行的位置,我們看到i的值已經在程式程式碼中展示出來了,黃色的程式碼處,這個是AS的功能,對於我們除錯來講,這簡直是非常大的福利了。
點選單步除錯按鈕或按快捷鍵F8,看看效果。這裡我們看到selector變數的值已經出來了
selector:0
,我們在看看黃色位置i的當前值是0。
這時我們繼續F8,我們切換到logcat檢視日誌,我打印出的i的值是0,
我們在切回道Debugger面板,可以看到Variables顯示面板中,有i的值是0,selector的值是0。以及我們可以看到Frames控制面板中可以顯示出當前程式的位置在:onCreate():28,第28行。
2. step into:看到方法往裡走
比如我們的for迴圈當中呼叫了一個
stepNext(int i)
方法,當我們走到這裡想看看這個方法裡面的執行過程的時候我們可以這樣,當走到這個方法的時候我們可以按下F7,或者如下圖的圖示。
這時就走到了stepNext方法當中。
在這裡列印了一個log,我們再按一下F8我們來看看Logcat, 這裡我列印的log都是為了做教程用,除錯我們就不用打log了直接看顯示面板就OK了
3. force step into :所有方法看完整
這個是可以看到你所呼叫的所有方法的實現會讓你跟著它走一遍,研究原始碼使用非常方便
4. step out :有斷點下一個,走完斷點繼續走
這裡如果我們的一個流程當中,包括呼叫的方法,如果有斷點走到下一個斷點,如果沒有斷點,而是在一個呼叫的方法當中,會跳出這個方法,繼續走。
這裡理解比較難,舉個例子:
(上圖)我現在程式位置在第一個斷點位置(24行),我呼叫的stepNext方法中也有一個斷點,此時我按下step out按鈕會走到stepNext中的斷點處(39行)我此時如果再按一下step out 會走到stepNext方法的調用出的下一個可執行程式碼(30行)
(上圖)如果我現在程式位置在stepNext的方法中,如果我此時按下step out,會走到stepNext方法的調用出的下一個可執行程式碼(30行)
5. run to Cursor :下個斷點我們見
這裡的意思就是說,會很快執行到下一個斷點的位置,而且可以靜如任何呼叫的方法
二、高階除錯
1. 跨斷點除錯
如果我們設定了多個斷點,現在我們需要直接跳轉到下一個斷點,那麼直接點選下圖就可以了
2.觀察變數
如果我們想觀察1個或者幾個變數的值的變化,如果我們在Variables顯示面版中觀察如果我這裡有太多太多的自定義變數和系統變量了,那麼就難觀察了,我們可以做如下操作:
點選Watches,點選+號,然後輸入變數的名稱回車就OK了,而且會有歷史記錄哦
如果變數名比較長我們可以這樣:
選擇[Variables]中的變數名然後點選[右鍵],選擇[Add to Watches],然後Watches面板中就有了
3.設定變數的值
在程式中有很多的條件語句和迴圈語句,除錯也是比較耗時的,我們可以通過快速設定變數的值來加快除錯速度,我們可以做如下操作:
選擇[Variables]中的變數名然後點選[右鍵],選擇[Set Value..]或者選擇之後直接F2(如上圖)(下圖為Variables面板)
4.檢視斷點
點選之後我們可以看到所有的斷點,以及位置程式碼,也可以設定一些屬性
5.停止除錯
要注意的是這裡的[停止除錯]不是讓程式停止,而是跳過所有除錯
到這裡我們的Android Studio的斷點除錯和高階除錯就完畢了。
Attach模式除錯
等等!先彆著急翻頁,本期還有最後一個壓軸的技術點要分享給大家。
想象一下下面的場景:你的APK如果已經執行在普通模式(非Debug)的情況下,你突然想Debug,而又不想重新執行浪費時間,該怎麼辦呢?
普通模式下想設定斷點進行除錯可不可以呢?
當然是可以的,不僅可以,這種方式已經漸漸替代了原先的方案,畢竟很方便,不是嗎?那具體要怎麼做呢?
一、先設定斷點,再正常執行APK
(圖4.2)
二、點選Attach除錯
或者像下面一樣開啟也是可以的
(圖4.3)
即執行Run->Attach debugger to Android process
(圖4.4)
attach process到指定程序,條件觸發之後就可以直接進入除錯模式。之後該怎麼做不用我再說了吧?