引子
親,學習多年Android還一直在打log绷杜?就算用了log庫裝起嗶來也漸漸力不從心垃瞧。不僅臉上掛不住,一多還特別煩船庇。
我想基本剛開始做開發(fā)的coder們這算是最常用的Debug方法了吭产,也被稱為最低端coder調試方法⊙悸郑基本就是人腦Debug臣淤。而且這種方法有個最蛋疼的地方就是每次修改日志輸出、代碼后就要重新發(fā)布一次app窃爷,然后就在那兒等AS編譯邑蒋、打包姓蜂、安裝APK,一路下來再少也得花上半分鐘吧医吊,尤其是工程大了后钱慢,調一次想死的心都有了(即使AS現(xiàn)在可以采用Instant run熱發(fā)布,但是Instant run有個坑就是有時候代碼改了后你會發(fā)現(xiàn)發(fā)布上去的代碼還是沒改過的卿堂,只能使用Rerun或者Stop APP后才會有用)束莫。此方法用來調試程序在一些分析程序流程、把一些傳遞的數(shù)據(jù)輸出以便于分析的時候還是有用的览绿。總之別拿這個當Debug的工具穗慕。
現(xiàn)推出豪華打斷腿禮包饿敲,教您領略AS的無限魅力!
單擊紅框中的按鈕可以用debug模式運行app逛绵。
附著調試(Attach Debugger)這個按鈕可以在不重啟app的情況下怀各,選擇已經運行的app進入調試模式。
調式操作區(qū)
依次是八個按鈕
- 顯示執(zhí)行點:Show Execution Point:點擊該按鈕,光標將定位到當前正在調試的位置暑脆。
- 步過:Step Over(F8):單步調試且不進入方法內部
- 步入:Step Into (F7): 單步調試且進入方法內部渠啤,如果是類庫的方法則不會進入。
- 強制步入:Force Step Into:一行一行往下跑添吗,不管是自定義的方法還是類庫的方法 (很少用到)
- 步出:Step Out(Shift + F8):會快速運行完該方法沥曹,跳出當前執(zhí)行的方法內部,執(zhí)行到該方法調用的下一句代碼碟联。
- 刪除幀:Drop Frame:將執(zhí)行點移回從堆棧中刪除當前方法幀的方法調用(大意理解為中斷執(zhí)行妓美,并且如果該方法是被調用的,則返回到當前方法被調用處鲤孵,并且所有上下文變量的值也恢復到該方法未執(zhí)行時的狀態(tài)壶栋。)
- 運行到光標所在的點:Force Run to Cursor:可以忽視已經存在的斷點,跳轉到光標所在處普监。(神器)
- 計算表達式:Evaluate expression:可以通過表達式求值
點擊該按鈕將使程序繼續(xù)運行贵试,如果還有下處斷點,則跳轉到下一個斷點凯正。
變量觀察區(qū)
右鍵添加到變量監(jiān)控區(qū)毙玻,十分方便的查看集合數(shù)組的數(shù)據(jù)。
斷點分類
條件斷點
點擊創(chuàng)建斷點廊散。右鍵斷點桑滩,輸入條件。只有當滿足條件時允睹,才會進入到斷點中运准。想想以前傻傻的F8幌氮,果然還是偷懶比較爽!
日志斷點
該類型的斷點不會使程序停下來胁澳,而是輸出日志信息该互,然后繼續(xù)執(zhí)行。有了這個神器听哭,就不需要再打log了慢洋。
取消勾選Suspeng復選框(即表示程序運行至此斷點時不會停下來供開發(fā)者調試),然后勾選Log evaluated expression:陆盘,并輸入打印語句即可。
變量斷點
如果該變量的值發(fā)生改變败明,程序會自動停下來隘马,并定位在改變變量值的地方。
方法斷點
在定義方法的第一行打斷點妻顶,可以方便的觀察到方法的參數(shù)和返回結果酸员。
異常斷點
在調試過程一旦發(fā)生選定的異常,調試器就會定位到異常發(fā)生處讳嘱。
- 具體步驟
Ctrl+Shift+F8 喚出斷點管理頁面幔嗦。
實驗中碰到的坑
android Run模式也會出現(xiàn)"Waiting for debugger"的解決方法
出現(xiàn)“waiting for debugger”窗口是在debug模式下運行出現(xiàn)的。但是沥潭,在去除斷點且在run模式下也出現(xiàn)了此窗口邀泉,并且一直如此。卸載程序重新運行也是如此钝鸽。網(wǎng)上說的重啟adb也木有用汇恤。
- 解決方案:重啟模擬器 (淚奔)