Android開發技巧分享:AS Debug還能這麼玩?

做者:Geekholt

debug 是平常開發中很是重要的技能,並不只限於單步調試這些簡單的使用,其實對於一些第三方 aar甚至系統源碼,還支持運行中不阻塞再不修改這些源碼的基礎上打日誌等很是多的技巧。程序員

並且這屬於一個實用且能夠長期使用的技能,付出一點時間,長期的收益是很是明顯的。面試

目錄

Debug斷點跟蹤調試是開發過程當中分析代碼、解決BUG的一個重要手段,不少程序員的調試水平每每停留在單步執行階段,由於單步執行每每就能夠解決大部分的問題。可是一個優秀的程序員不只僅要解決問題,還要高效地解決問題,本文將介紹一些很是方便的調試技巧。多線程

基本使用

Debug App有兩種途徑:架構

第一種是直接點擊下圖運行按鈕右側的小蟲狀圖標,運行並調試當前Project工具

第二種就是調試當前已經處於運行狀態下的App,點擊運行按鈕右側第五個按鈕,彈出Choose Process窗口,選擇對應的進程,點擊OK按鈕便可進入調試模式,此時,咱們即可以在須要的地方直接下斷點調試代碼了學習

接下來就是常見的調試方法了,在Debug窗口頂部工具欄有一排操做按鈕,好比Step Over(單步執行)、Step Into(進入方法)等,如圖所示:lua

打斷點和取消斷點最直接的方式就是單擊目標代碼行的行號右側空白處,而後在Debug窗口左側有個斷點瀏覽按鈕View Breakpoints,位於中止按鈕下方第一個,能夠瀏覽Project中的全部斷點,同時能夠添加刪除斷點spa

條件斷點

有時候,咱們的斷點打在了循環體裏面,可是咱們只想看某一特定循環次數下的運行狀況,難道要不停地跳至下一次斷點直至知足咱們的要求嗎?線程

條件斷點能夠本身輸入條件,好比for循環中輸入i == 5便可讓程序直接運行至第六次循環debug

日誌斷點

打印日誌也是跟蹤程序分析問題的一個很是有效的手段,可是若是咱們的程序已經運行而且處於調試模式,此時若是想打印日誌來分析代碼,難道還要中止調試、添加Log代碼並從新編譯運行嗎?

若是使用日誌斷點,就不用這麼繁瑣了。右鍵點擊斷點,在彈出的窗口中取消勾選Suspeng複選框(即表示程序運行至此斷點時不會停下來供開發者調試),而後勾選Evaluate and log,並輸入打印語句便可。這樣,當Debug模式下的程序執行至此,不會停下來,而是在控制檯中打印對應信息

變量賦值

好比,咱們的代碼裏有一個變量,這個變量的值會影響到程序的執行結果。若是咱們想觀察這個變量在不一樣的賦值下程序的執行結果怎麼辦呢?

難道要一遍遍的在代碼裏修改變量值,而後從新運行程序嗎?

顯然這是很是麻煩的操做。若是利用Debug模式下的變量賦值(Set Value),只須要運行一次,就能達到咱們的觀察效果。

在使用該變量的代碼處打個斷點,而後在Variables窗口找到對應的變量,修改變量值並執行便可。

如這裏咱們能夠把b的值改成false,那麼Toast輸出的值就是Hi

變量觀察

在Variables變量區和Watches觀察區能夠查看Debug模式下,程序執行到斷點處的變量值或者對象的各屬性值,若是程序比較複雜變量不少看起來就有點不方便。

那麼就能夠經過彈出窗口的形式查看屬性值,只要將光標定位至斷點代碼行所用到的變量,IDE會自動彈出一個小窗口,以下圖所示,此時,使用對應的快捷鍵或者點擊這個小窗口裏的變量便可彈出變量屬性值窗口,Mac下的快捷鍵位command + F1,如圖所示:

咱們也可使用New watch,方便咱們更快定位到須要觀察的變量

 對象求值

在斷點處,若是有變量對象,系統提供了表達式求值功能,針對Variables視圖中的變量對象,咱們能夠輸入任何計算語句,實時查看錶達式計算結果。

具體操做爲,右鍵Variables視圖中的變量對象,選擇Evaluate Expression,彈出表達式窗口,輸入任何你想要的計算語句,點擊Evaluate計算按鈕,便可顯示計算結果

方法斷點

當咱們想要觀察某個方法的調用時機,可使用方法斷點

這裏有一個小建議,咱們能夠在寫一個方法的時候,在方法註釋中列出方法入參,這樣一方面是能夠給入參增長一些註釋,同時在打斷點的時候,也能很是直觀的看到方法入參的值

變量斷點

有時候,咱們想知道自定義的變量的什麼時候何地發生了改變,就可使用變量斷點。在變量定義行打斷點,開啓Debug模式,在程序執行的過程當中,若是該變量的值發生改變,程序會自動停下來,並定位在改變變量值的地方。這裏要注意的是,對於引用數據類型,經過set方法改變內部的值並不會觸發變量斷點,只有引用的地址發生改變纔會觸發

異常斷點

程序在執行的過程當中可能會出現各類各樣的未知性異常,若是能在發生異常的時候第一時間讓程序停下來,並定位到異常出現的地方,而不是讓應用直接崩潰,那樣有時候能幫助咱們更方便定位問題

打開斷點管理器,點擊工具欄菜單Run,選擇View Breakpoints;在Debug窗口直接點擊View Breakpoints圖標。點擊左上角加號按鈕,能夠添加各類斷點,包括前文提到的Method Breakpoints和Field Watchpoints斷點,這裏咱們選擇Exception Breakpoints異常斷點,在彈出的Enter Exception Class窗口中輸入須要監控的異常類別便可

這樣當咱們運行下面的代碼,IDE會自動幫咱們定位到問題發生的位置

總結

debug是很是很是基礎的技術,所謂磨刀不誤砍柴工,掌握一些小技巧,每每能幫咱們更高效的解決一些問題。

本文拋磚引玉,但願你們在開發過程當中多留心一些很基礎的技術,有時候瞭解一些你認爲很不起眼的知識點,可以幫助你解決一些很棘手的問題。

可是,在多線程環境下,光靠 debug 是不夠的。有時 debug 自己會帶來一些問題混淆了現場,好比由於 debug 時的卡頓形成環境不一致等等,這時應該學會使用打日誌的形式幫忙調試,平時打日誌的時候也應該多注意一些規範,這樣能更方便排查問題。


在這我也分享一份本身收錄整理的Android學習PDF+架構視頻+面試文檔+源碼筆記,還有高級架構技術進階腦圖、Android開發面試專題資料,高級進階架構資料這些都是我閒暇還會反覆翻閱的精品資料。在腦圖中,每一個知識點專題都配有相對應的實戰項目,能夠有效的幫助你們掌握知識點。

總之也是在這裏幫助你們學習提高進階,也節省你們在網上搜索資料的時間來學習,也能夠分享給身邊好友一塊兒學習

若是你有須要的話,能夠點贊+評論關注我加Vx:15388039515(備註思否,須要進階資料)

相關文章
相關標籤/搜索