Debug斷點跟蹤調(diào)試是軟件開發(fā)過程中分析代碼诱担、解決BUG的一個重要手段,不同IDE下的Debug工具的使用有所不同电爹,但提供的調(diào)試功能一定是應(yīng)有盡有蔫仙。很多程序員的Debug能力都停留在基本的單步執(zhí)行、斷點跳躍上丐箩,殊不知還有很多鮮為人知但非常方便的調(diào)試技巧摇邦。本文就以Android Studio工具為例,展示一些一般人不知道的Debug調(diào)試技巧屎勘,掌握這些施籍,你也算是Debug調(diào)試大師了。
基本使用
Debug App有兩種途徑概漱,第一種是直接點擊下圖運行按鈕右側(cè)的小蟲狀圖標(biāo)丑慎,運行并調(diào)試當(dāng)前Project,這個我想大家都知道。
第二種就是調(diào)試當(dāng)前已經(jīng)處于運行狀態(tài)下的App竿裂,這也是我們用的更多的一種調(diào)試手段玉吁,即Attach debugger to Android process
。點擊運行按鈕右側(cè)第三個按鈕腻异,彈出Choose Process
窗口进副,選擇對應(yīng)的進程,點擊OK按鈕即可進入調(diào)試模式悔常,此時影斑,我們便可以在需要的地方直接下斷點調(diào)試代碼了:
接下來就是常見的調(diào)試方法了,在Debug窗口頂部工具欄有一排操作按鈕这嚣,比如Step Over
(單步執(zhí)行)鸥昏、Step Into
(進入方法)等塞俱,如圖所示:
打斷點和取消斷點最直接的方式就是單擊目標(biāo)代碼行的行號右側(cè)空白處姐帚,然后在Debug窗口左側(cè)有個斷點瀏覽按鈕View Breakpoints
,位于停止按鈕下方第一個障涯,可以瀏覽Project中的所有斷點罐旗,同時可以添加刪除斷點:
條件斷點
有時候,我們的斷點打在了循環(huán)體里面唯蝶,但是我們只想看某一特定循環(huán)次數(shù)下的運行情況九秀,難道要使用Run to Cursor
功能不停地跳至下一次斷點直至滿足我們的要求嗎?
如果你知道條件斷點的話粘我,一定會悔不當(dāng)初鼓蜒。條件斷點可以滿足開發(fā)人員自己輸入條件,比如fori
循環(huán)中輸入i == 5
即可讓程序直接運行至第六次循環(huán)征字,for each
循環(huán)中針對list某一元素下的斷點調(diào)試都弹。只需要右鍵點擊斷點,在彈出的窗口中輸入Condiction條件匙姜,點擊Done
按鈕畅厢,然后當(dāng)程序執(zhí)行到循環(huán)體時,會在滿足條件的一次循環(huán)中停下來氮昧,供我們調(diào)試:
日志斷點
打印日志也是跟蹤程序分析問題的一個非常有效的手段框杜,但是如果我們的程序已經(jīng)運行并且處于調(diào)試模式,此時如果想打印日志更加直觀的分析代碼袖肥,難道還要停止調(diào)試咪辱、添加Log代碼并重新編譯運行嗎?
如果你知道日志斷點椎组,就不用如此大費周折梧乘,費時費力了。還是右鍵點擊斷點,在彈出的窗口中取消勾選Suspeng
復(fù)選框(即表示程序運行至此斷點時不會停下來供開發(fā)者調(diào)試)选调,然后勾選Log evaluated expression:
夹供,并輸入打印語句即可。這樣仁堪,當(dāng)Debug模式下的程序執(zhí)行至此哮洽,不會停下來,而是在控制臺中打印對應(yīng)信息弦聂,如:
變量賦值
比如鸟辅,我們的代碼里有一個變量,這個變量的值會影響到程序的執(zhí)行結(jié)果莺葫。如果我們想觀察這個變量在不同的賦值下程序的執(zhí)行結(jié)果怎么辦呢匪凉?難道要一遍遍的在代碼里修改變量值,然后重新運行程序嗎捺檬?顯然這是非常麻煩的操作再层。其實,如果利用Debug模式下的變量賦值(Set Value)堡纬,只需要運行一次聂受,就能達到我們的觀察效果。在使用該變量的代碼處打個斷點烤镐,然后在Variables
窗口找到對應(yīng)的變量蛋济,修改變量值并執(zhí)行即可。
變量觀察
在Variables
變量區(qū)和Watches
觀察區(qū)可以查看Debug模式下炮叶,程序執(zhí)行到斷點處的變量值或者對象的各屬性值碗旅,但是多多少少查看起來還是有些不方便。其實可以通過彈出窗口的形式查看屬性值镜悉,只要將光標(biāo)定位至斷點代碼行所用到的變量祟辟,IDE會自動彈出一個小窗口,如下圖所示积瞒,此時川尖,使用對應(yīng)的快捷鍵或者點擊這個小窗口里的變量即可彈出變量屬性值窗口,Mac下的快捷鍵位command + F1
茫孔,如圖所示:
對象求值
在斷點處叮喳,如果有變量對象,系統(tǒng)提供了表達式求值功能缰贝,針對Variables
視圖中的變量對象馍悟,我們可以輸入任何計算語句,實時查看表達式計算結(jié)果剩晴。具體操作為锣咒,右鍵Variables
視圖中的變量對象侵状,選擇Evaluate Expression
,彈出表達式窗口毅整,輸入任何你想要的計算語句趣兄,點擊Evaluate
計算按鈕,即可顯示Result結(jié)果:
方法斷點
通常我們會對方法里的代碼添加斷點調(diào)試悼嫉,很少對方法本身調(diào)試艇潭。其實,如果只是為了看到方法的參數(shù)和返回結(jié)果戏蔑,我們可以在定義方法的第一行打斷點蹋凝,直接對方法本身調(diào)試,此時斷點的展示圖標(biāo)樣式也會與眾不同:
變量斷點
有時候总棵,我們想知道自定義的變量的何時何地發(fā)生了改變鳍寂,就可以使用變量斷點。變量斷點的圖標(biāo)樣式也與眾不同情龄,在變量定義行打斷點迄汛,開啟Debug模式,在程序執(zhí)行的過程中刃唤,如果該變量的值發(fā)生改變隔心,程序會自動停下來白群,并定位在改變變量值的地方尚胞,供開發(fā)者調(diào)試:
異常斷點
程序在執(zhí)行的過程中可能會出現(xiàn)各種各樣的未知性異常,如果能在發(fā)生異常的時候第一時間讓程序停下來帜慢,并定位到異常出現(xiàn)的地方笼裳,供開發(fā)者調(diào)試,那當(dāng)然是極好的粱玲。而萬能的Android Studio就提供了這樣的功能躬柬。
打開斷點管理器,這里有兩種方式打開:點擊工具欄菜單Run
抽减,選擇View Breakpoints
允青;在Debug窗口直接點擊View Breakpoints
圖標(biāo)。點擊左上角加號按鈕卵沉,可以添加各種斷點颠锉,包括前文提到的Method Breakpoints
和Field Watchpoints
斷點,這里我們選擇Exception Breakpoints
異常斷點史汗,在彈出的Enter Exception Class
窗口中輸入需要監(jiān)控的異常類別即可:
歡迎補充
以上便是使用Android Studio工具的開發(fā)過程中很是實用但卻少見的Debug調(diào)試技巧琼掠,當(dāng)然所有這些操作都可以通過快捷鍵打開,將鼠標(biāo)光標(biāo)移到對應(yīng)圖標(biāo)處停撞,都會顯示對應(yīng)快捷鍵組合瓷蛙,大家自行酌情使用悼瓮。
當(dāng)然,如果你還有更好的調(diào)試技巧艰猬,歡迎留言補充横堡,讓我們一起在分享中學(xué)習(xí),交流中進步冠桃。