Debug斷點跟蹤除錯是軟體開發過程中分析程式碼、解決BUG的一個重要手段,不同IDE下的Debug工具的使用有所不同,但提供的除錯功能一定是應有盡有。很多程式設計師的Debug能力都停留在基本的單步執行、斷點跳躍上,殊不知還有很多鮮為人知但非常方便的除錯技巧。本文就以Android Studio工具為例,展示一些一般人不知道的Debug除錯技巧,掌握這些,你也算是Debug除錯大師了。
基本使用
Debug App有兩種途徑,第一種是直接點選下圖執行按鈕右側的小蟲狀圖示,執行並除錯當前Project,這個我想大家都知道。
第二種就是除錯當前已經處於執行狀態下的App,這也是我們用的更多的一種除錯手段,即Attach debugger to Android process
。點選執行按鈕右側第三個按鈕,彈出Choose Process
視窗,選擇對應的程式,點選OK按鈕即可進入除錯模式,此時,我們便可以在需要的地方直接下斷點除錯程式碼了:
接下來就是常見的除錯方法了,在Debug視窗頂部工具欄有一排操作按鈕,比如Step Over
(單步執行)、Step Into
(進入方法)等,如圖所示:
打斷點和取消斷點最直接的方式就是單擊目的碼行的行號右側空白處,然後在Debug視窗左側有個斷點瀏覽按鈕View Breakpoints
,位於停止按鈕下方第一個,可以瀏覽Project中的所有斷點,同時可以新增刪除斷點:
條件斷點
有時候,我們的斷點打在了迴圈體裡面,但是我們只想看某一特定迴圈次數下的執行情況,難道要使用Run to Cursor
功能不停地跳至下一次斷點直至滿足我們的要求嗎?
如果你知道條件斷點的話,一定會悔不當初。條件斷點可以滿足開發人員自己輸入條件,比如fori
迴圈中輸入i == 5
即可讓程式直接執行至第六次迴圈,for each
迴圈中針對list某一元素下的斷點除錯。只需要右鍵點選斷點,在彈出的視窗中輸入Condiction條件,點選Done
按鈕,然後當程式執行到迴圈體時,會在滿足條件的一次迴圈中停下來,供我們除錯:
日誌斷點
列印日誌也是跟蹤程式分析問題的一個非常有效的手段,但是如果我們的程式已經執行並且處於除錯模式,此時如果想列印日誌更加直觀的分析程式碼,難道還要停止除錯、新增Log程式碼並重新編譯執行嗎?
如果你知道日誌斷點,就不用如此大費周折,費時費力了。還是右鍵點選斷點,在彈出的視窗中取消勾選Suspeng
核取方塊(即表示程式執行至此斷點時不會停下來供開發者除錯),然後勾選Log evaluated expression:
,並輸入列印語句即可。這樣,當Debug模式下的程式執行至此,不會停下來,而是在控制檯中列印對應資訊,如:
變數賦值
比如,我們的程式碼裡有一個變數,這個變數的值會影響到程式的執行結果。如果我們想觀察這個變數在不同的賦值下程式的執行結果怎麼辦呢?難道要一遍遍的在程式碼裡修改變數值,然後重新執行程式嗎?顯然這是非常麻煩的操作。其實,如果利用Debug模式下的變數賦值(Set Value),只需要執行一次,就能達到我們的觀察效果。在使用該變數的程式碼處打個斷點,然後在Variables
視窗找到對應的變數,修改變數值並執行即可。
變數觀察
在Variables
變數區和Watches
觀察區可以檢視Debug模式下,程式執行到斷點處的變數值或者物件的各屬性值,但是多多少少檢視起來還是有些不方便。其實可以通過彈出視窗的形式檢視屬性值,只要將游標定位至斷點程式碼行所用到的變數,IDE會自動彈出一個小視窗,如下圖所示,此時,使用對應的快捷鍵或者點選這個小視窗裡的變數即可彈出變數屬性值視窗,Mac下的快捷鍵位command + F1
,如圖所示:
物件求值
在斷點處,如果有變數物件,系統提供了表示式求值功能,針對Variables
檢視中的變數物件,我們可以輸入任何計算語句,實時檢視錶達式計算結果。具體操作為,右鍵Variables
檢視中的變數物件,選擇Evaluate Expression
,彈出表示式視窗,輸入任何你想要的計算語句,點選Evaluate
計算按鈕,即可顯示Result結果:
方法斷點
通常我們會對方法裡的程式碼新增斷點除錯,很少對方法本身除錯。其實,如果只是為了看到方法的引數和返回結果,我們可以在定義方法的第一行打斷點,直接對方法本身除錯,此時斷點的展示圖示樣式也會與眾不同:
變數斷點
有時候,我們想知道自定義的變數的何時何地發生了改變,就可以使用變數斷點。變數斷點的圖示樣式也與眾不同,在變數定義行打斷點,開啟Debug模式,在程式執行的過程中,如果該變數的值發生改變,程式會自動停下來,並定位在改變變數值的地方,供開發者除錯:
異常斷點
程式在執行的過程中可能會出現各種各樣的未知性異常,如果能在發生異常的時候第一時間讓程式停下來,並定位到異常出現的地方,供開發者除錯,那當然是極好的。而萬能的Android Studio就提供了這樣的功能。
開啟斷點管理器,這裡有兩種方式開啟:點選工具欄選單Run
,選擇View Breakpoints
;在Debug視窗直接點選View Breakpoints
圖示。點選左上角加號按鈕,可以新增各種斷點,包括前文提到的Method Breakpoints
和Field Watchpoints
斷點,這裡我們選擇Exception Breakpoints
異常斷點,在彈出的Enter Exception Class
視窗中輸入需要監控的異常類別即可:
歡迎補充
以上便是使用Android Studio工具的開發過程中很是實用但卻少見的Debug除錯技巧,當然所有這些操作都可以通過快捷鍵開啟,將滑鼠游標移到對應圖示處,都會顯示對應快捷鍵組合,大家自行酌情使用。
當然,如果你還有更好的除錯技巧,歡迎留言補充,讓我們一起在分享中學習,交流中進步。
關注作者
本文由 亦楓 創作並首發於 亦楓的個人部落格 ,同步授權微信公眾號:技術鳥(NiaoTech),歡迎關注。