Android Studio 掌握這些調(diào)試技巧,Debug能力不能再高啦

Debug斷點跟蹤調(diào)試是軟件開發(fā)過程中分析代碼、解決BUG的一個重要手段,不同IDE下的Debug工具的使用有所不同,但提供的調(diào)試功能一定是應有盡有。很多程序員的Debug能力都停留在基本的單步執(zhí)行、斷點跳躍上,殊不知還有很多鮮為人知但非常方便的調(diào)試技巧。本文就以Android Studio工具為例,展示一些一般人不知道的Debug調(diào)試技巧,掌握這些,你也算是Debug調(diào)試大師了。

基本使用


Debug App有兩種途徑,第一種是直接點擊下圖運行按鈕右側(cè)的小蟲狀圖標,運行并調(diào)試當前Project,這個我想大家都知道。

Debug App.png

第二種就是調(diào)試當前已經(jīng)處于運行狀態(tài)下的App,這也是我們用的更多的一種調(diào)試手段,即Attach debugger to Android process。點擊運行按鈕右側(cè)第三個按鈕,彈出Choose Process窗口,選擇對應的進程,點擊OK按鈕即可進入調(diào)試模式,此時,我們便可以在需要的地方直接下斷點調(diào)試代碼了:

Attach debugger to Android process.png

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

Debug窗口.png

打斷點和取消斷點最直接的方式就是單擊目標代碼行的行號右側(cè)空白處,然后在Debug窗口左側(cè)有個斷點瀏覽按鈕View Breakpoints,位于停止按鈕下方第一個,可以瀏覽Project中的所有斷點,同時可以添加刪除斷點:

View Breakpoints.png

條件斷點


有時候,我們的斷點打在了循環(huán)體里面,但是我們只想看某一特定循環(huán)次數(shù)下的運行情況,難道要使用Run to Cursor功能不停地跳至下一次斷點直至滿足我們的要求嗎?

循環(huán)里的斷點.png

如果你知道條件斷點的話,一定會悔不當初。條件斷點可以滿足開發(fā)人員自己輸入條件,比如fori循環(huán)中輸入i == 5即可讓程序直接運行至第六次循環(huán),for each循環(huán)中針對list某一元素下的斷點調(diào)試。只需要右鍵點擊斷點,在彈出的窗口中輸入Condiction條件,點擊Done按鈕,然后當程序執(zhí)行到循環(huán)體時,會在滿足條件的一次循環(huán)中停下來,供我們調(diào)試:

條件斷點.png

日志斷點


打印日志也是跟蹤程序分析問題的一個非常有效的手段,但是如果我們的程序已經(jīng)運行并且處于調(diào)試模式,此時如果想打印日志更加直觀的分析代碼,難道還要停止調(diào)試、添加Log代碼并重新編譯運行嗎?

如果你知道日志斷點,就不用如此大費周折,費時費力了。還是右鍵點擊斷點,在彈出的窗口中取消勾選Suspeng復選框(即表示程序運行至此斷點時不會停下來供開發(fā)者調(diào)試),然后勾選Log evaluated expression:,并輸入打印語句即可。這樣,當Debug模式下的程序執(zhí)行至此,不會停下來,而是在控制臺中打印對應信息,如:

日志斷點.png

變量賦值


比如,我們的代碼里有一個變量,這個變量的值會影響到程序的執(zhí)行結(jié)果。如果我們想觀察這個變量在不同的賦值下程序的執(zhí)行結(jié)果怎么辦呢?難道要一遍遍的在代碼里修改變量值,然后重新運行程序嗎?顯然這是非常麻煩的操作。其實,如果利用Debug模式下的變量賦值(Set Value),只需要運行一次,就能達到我們的觀察效果。在使用該變量的代碼處打個斷點,然后在Variables窗口找到對應的變量,修改變量值并執(zhí)行即可。

Set Value.png

變量觀察


Variables變量區(qū)和Watches觀察區(qū)可以查看Debug模式下,程序執(zhí)行到斷點處的變量值或者對象的各屬性值,但是多多少少查看起來還是有些不方便。其實可以通過彈出窗口的形式查看屬性值,只要將光標定位至斷點代碼行所用到的變量,IDE會自動彈出一個小窗口,如下圖所示,此時,使用對應的快捷鍵或者點擊這個小窗口里的變量即可彈出變量屬性值窗口,Mac下的快捷鍵位command + F1,如圖所示:

變量觀察01.png
變量觀察02.png

對象求值


在斷點處,如果有變量對象,系統(tǒng)提供了表達式求值功能,針對Variables視圖中的變量對象,我們可以輸入任何計算語句,實時查看表達式計算結(jié)果。具體操作為,右鍵Variables視圖中的變量對象,選擇Evaluate Expression,彈出表達式窗口,輸入任何你想要的計算語句,點擊Evaluate計算按鈕,即可顯示Result結(jié)果:

Evaluate Expression01.png
Evaluate Expression02.png

方法斷點


通常我們會對方法里的代碼添加斷點調(diào)試,很少對方法本身調(diào)試。其實,如果只是為了看到方法的參數(shù)和返回結(jié)果,我們可以在定義方法的第一行打斷點,直接對方法本身調(diào)試,此時斷點的展示圖標樣式也會與眾不同:

方法斷點.png

變量斷點


有時候,我們想知道自定義的變量的何時何地發(fā)生了改變,就可以使用變量斷點。變量斷點的圖標樣式也與眾不同,在變量定義行打斷點,開啟Debug模式,在程序執(zhí)行的過程中,如果該變量的值發(fā)生改變,程序會自動停下來,并定位在改變變量值的地方,供開發(fā)者調(diào)試:

變量斷點.png

異常斷點


程序在執(zhí)行的過程中可能會出現(xiàn)各種各樣的未知性異常,如果能在發(fā)生異常的時候第一時間讓程序停下來,并定位到異常出現(xiàn)的地方,供開發(fā)者調(diào)試,那當然是極好的。而萬能的Android Studio就提供了這樣的功能。

打開斷點管理器,這里有兩種方式打開:點擊工具欄菜單Run,選擇View Breakpoints;在Debug窗口直接點擊View Breakpoints圖標。點擊左上角加號按鈕,可以添加各種斷點,包括前文提到的Method BreakpointsField Watchpoints斷點,這里我們選擇Exception Breakpoints異常斷點,在彈出的Enter Exception Class窗口中輸入需要監(jiān)控的異常類別即可:

Breakpoints.png
Exception Breakpoints.png

歡迎補充


以上便是使用Android Studio工具的開發(fā)過程中很是實用但卻少見的Debug調(diào)試技巧,當然所有這些操作都可以通過快捷鍵打開,將鼠標光標移到對應圖標處,都會顯示對應快捷鍵組合,大家自行酌情使用。

當然,如果你還有更好的調(diào)試技巧,歡迎留言補充,讓我們一起在分享中學習,交流中進步。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,797評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,179評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,628評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,642評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,444評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,948評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,040評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,185評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,717評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,794評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,418評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,414評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,750評論 2 370

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,603評論 25 707
  • Android Studio目前已經(jīng)成為開發(fā)Android的主要工具,用熟了可謂相當順手。作為開發(fā)者,調(diào)試并發(fā)現(xiàn)b...
    涅槃1992閱讀 50,791評論 36 366
  • Android Studio目前已經(jīng)成為開發(fā)Android的主要工具,用熟了可謂相當順手。作為開發(fā)者,調(diào)試并發(fā)現(xiàn)b...
    7d3fadbb4407閱讀 560評論 0 3
  • Android Studio目前已經(jīng)成為開發(fā)Android的主要工具,用熟了可謂相當順手。作為開發(fā)者,調(diào)試并發(fā)現(xiàn)b...
    StChris閱讀 1,796評論 0 16
  • 安靜的時刻讓人毫無防備的陷入沉思。這真是讓人回想起來奇怪的現(xiàn)象。 每個人都有機會站立于高處,一旦有這樣的機會,自己...
    微妮安閱讀 199評論 0 2