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

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,這個我想大家都知道。

Debug App.png

第二種就是調(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)試代碼了:

Attach debugger to Android process.png

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

Debug窗口.png

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

View Breakpoints.png

條件斷點


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

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

如果你知道條件斷點的話粘我,一定會悔不當(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)試:

條件斷點.png

日志斷點


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

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

日志斷點.png

變量賦值


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

Set Value.png

變量觀察


Variables變量區(qū)和Watches觀察區(qū)可以查看Debug模式下炮叶,程序執(zhí)行到斷點處的變量值或者對象的各屬性值碗旅,但是多多少少查看起來還是有些不方便。其實可以通過彈出窗口的形式查看屬性值镜悉,只要將光標(biāo)定位至斷點代碼行所用到的變量祟辟,IDE會自動彈出一個小窗口,如下圖所示积瞒,此時川尖,使用對應(yīng)的快捷鍵或者點擊這個小窗口里的變量即可彈出變量屬性值窗口,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)試,此時斷點的展示圖標(biāo)樣式也會與眾不同:

方法斷點.png

變量斷點


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

變量斷點.png

異常斷點


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

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

Breakpoints.png
Exception Breakpoints.png

歡迎補充


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

當(dāng)然,如果你還有更好的調(diào)試技巧艰猬,歡迎留言補充横堡,讓我們一起在分享中學(xué)習(xí),交流中進步冠桃。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末翅萤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子腊满,更是在濱河造成了極大的恐慌套么,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碳蛋,死亡現(xiàn)場離奇詭異胚泌,居然都是意外死亡,警方通過查閱死者的電腦和手機肃弟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門玷室,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人笤受,你說我怎么就攤上這事穷缤。” “怎么了箩兽?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵津肛,是天一觀的道長。 經(jīng)常有香客問我汗贫,道長身坐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任落包,我火速辦了婚禮部蛇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘咐蝇。我一直安慰自己涯鲁,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布有序。 她就那樣靜靜地躺著抹腿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪笔呀。 梳的紋絲不亂的頭發(fā)上幢踏,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機與錄音许师,去河邊找鬼房蝉。 笑死僚匆,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的搭幻。 我是一名探鬼主播咧擂,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼檀蹋!你這毒婦竟也來了松申?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤俯逾,失蹤者是張志新(化名)和其女友劉穎贸桶,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體桌肴,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡皇筛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了坠七。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片水醋。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖彪置,靈堂內(nèi)的尸體忽然破棺而出拄踪,到底是詐尸還是另有隱情,我是刑警寧澤拳魁,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布惶桐,位于F島的核電站,受9級特大地震影響的猛,放射性物質(zhì)發(fā)生泄漏耀盗。R本人自食惡果不足惜想虎,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一卦尊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧舌厨,春花似錦岂却、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至揉燃,卻和暖如春扫尺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背炊汤。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工正驻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留弊攘,地道東北人。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓姑曙,卻偏偏與公主長得像襟交,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子伤靠,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353

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

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