Android Studio 調(diào)試完全掌控

本文介紹使用Android Studio開發(fā)應(yīng)用程序時(shí)進(jìn)行斷點(diǎn)調(diào)試相關(guān)的知識(shí)悯恍。干貨滿滿鞭达,適合初學(xué)者學(xué)習(xí)话肖。

1. 調(diào)試模式

想要進(jìn)行斷點(diǎn)調(diào)試疲酌,首先要進(jìn)入調(diào)試模式蜡峰。

1.1 開發(fā)者模式

首先要做手機(jī)上開啟開發(fā)者模式,然后在開發(fā)者模式中打開“USB調(diào)試”開關(guān)朗恳,有些設(shè)備上還要開啟“USB安裝”湿颅、“USB調(diào)試”等開關(guān),這要看具體的手機(jī)設(shè)備系統(tǒng)僻肖。


圖1-1開發(fā)者選項(xiàng)

此時(shí)使用電腦連接手機(jī)時(shí)肖爵,會(huì)彈出USB調(diào)試授權(quán)彈框,點(diǎn)擊確定即可臀脏。


圖1-2 授權(quán)彈框

關(guān)于如何打開“開發(fā)者模式”劝堪,不同的手機(jī)有不同的方式,可以在網(wǎng)上搜索揉稚。

1.1 連接已運(yùn)行的進(jìn)程

當(dāng)設(shè)備連接到電腦后秒啦,在Android Studio的工具欄就可以看到已連接的設(shè)備了。


圖1-3 已連接的設(shè)備

點(diǎn)擊右側(cè)這個(gè)按鈕“Attach Debugger to Android Process”搀玖,彈出進(jìn)程選擇彈框余境。


圖1-4 調(diào)試按鈕
圖1-5 選擇要調(diào)試的進(jìn)程

選擇進(jìn)程并點(diǎn)擊確認(rèn)按鈕,即可進(jìn)入調(diào)試模式灌诅。

1.2 運(yùn)行并連接

點(diǎn)擊這個(gè)“Debug ‘a(chǎn)pp’”按鈕芳来,可以安裝完應(yīng)用后立即進(jìn)入調(diào)試模式。


圖1-6 運(yùn)行并連接

1.3 啟動(dòng)時(shí)連接

有時(shí)我們希望調(diào)試已安裝應(yīng)用的啟動(dòng)過(guò)程猜拾,但是使用“Debug 'app'”按鈕會(huì)重新編譯安裝即舌,這樣會(huì)很慢且覆蓋掉現(xiàn)有的應(yīng)用,此時(shí)可以在手機(jī)上設(shè)定“選擇調(diào)試應(yīng)用”挎袜,并打開“等待調(diào)試器”:


圖1-7 等待調(diào)試應(yīng)用

這時(shí)在打開“Test”應(yīng)用(已選擇調(diào)試的應(yīng)用)顽聂,就會(huì)彈出等待調(diào)試對(duì)話框


圖1-8 等待連接調(diào)試

此時(shí) 點(diǎn)擊“Attach Debugger to Android Process”即可進(jìn)入應(yīng)用調(diào)試模式肥惭。
圖1-9 等待調(diào)試應(yīng)用時(shí),點(diǎn)此按鈕進(jìn)入調(diào)整模式

1.4 連接非主進(jìn)程

一次調(diào)試連接過(guò)程只能對(duì)一個(gè)進(jìn)程進(jìn)行調(diào)試紊搪,如果要調(diào)試非主進(jìn)程蜜葱,需要在選擇調(diào)試進(jìn)程界面選擇期望的進(jìn)程。


圖1-10 調(diào)試多個(gè)進(jìn)程

2. 斷點(diǎn)

2.1 斷點(diǎn)簡(jiǎn)介

在代碼區(qū)左側(cè)點(diǎn)擊即可添加斷點(diǎn)


圖2-1 添加斷點(diǎn)

當(dāng)代碼執(zhí)行到斷點(diǎn)處會(huì)暫停


圖2-2 代碼在斷點(diǎn)處停止運(yùn)行

斷點(diǎn)狀態(tài)下耀石,可以在Variables窗口(圖中右下側(cè)窗口)查看當(dāng)前環(huán)境下的變量信息牵囤,同時(shí)也可以修改變量的內(nèi)容。

點(diǎn)擊Evaluate Expression...按鈕娶牌,彈出表達(dá)式計(jì)算彈框奔浅,在這里可以執(zhí)行任何語(yǔ)句或查看任何變量的內(nèi)容。


圖2-3 Evaluate Expression...按鈕
圖2-4 在Evaluate彈框中查看“this”的內(nèi)容

2.2 條件斷點(diǎn)

在斷點(diǎn)上點(diǎn)擊彈出斷點(diǎn)菜單诗良,勾選“Condition”后汹桦,可以在下面的框中輸入任意條件語(yǔ)句,只有當(dāng)此處的條件為true的時(shí)候才會(huì)觸發(fā)斷點(diǎn)鉴裹。


圖2-5 在斷點(diǎn)處設(shè)置條件

2.3 非中斷斷點(diǎn)

在圖2-5中取消勾選“Suspend”選項(xiàng)舞骆,斷點(diǎn)就變成了非中斷斷點(diǎn)。顧名思義径荔,非中斷斷點(diǎn)并不會(huì)中斷程序的執(zhí)行督禽。
勾選“Evaluate and log”并在下面的輸入框中輸入任意語(yǔ)句,在代碼運(yùn)行到這個(gè)位置的時(shí)候就會(huì)執(zhí)行該語(yǔ)句总处。一般情況下可以輸出log或者改變某個(gè)變量的值狈惫。

如果輸出log,可以在調(diào)試模式的Console窗口中看到輸出


圖2-6 從Console窗口看到日志輸出

2.4 變量&方法斷點(diǎn)

可以在變量和方法上添加斷點(diǎn)鹦马,代碼將在變量改變(或訪問(wèn)時(shí)胧谈,可在斷點(diǎn)菜單中設(shè)置)和方法調(diào)用(進(jìn)入或退出,可設(shè)置)時(shí)中斷荸频,當(dāng)然也可以執(zhí)行指定的語(yǔ)句菱肖。


圖2-7 在變量和方法上添加斷點(diǎn)

值得注意的時(shí),在方法上添加斷點(diǎn)會(huì)導(dǎo)致程序運(yùn)行異常緩慢旭从。

2.5 異常斷點(diǎn)

點(diǎn)擊Debug菜單中的“View Breakpoints...”按鈕(如圖2-8)稳强,彈出斷點(diǎn)管理頁(yè)面。勾選“Java Exception Breakpoints”和悦,應(yīng)用中任意代碼崩潰時(shí)都會(huì)觸發(fā)斷點(diǎn)退疫。


圖2-8 異常斷點(diǎn)

在圖2-8中還能夠看到添加的所有斷點(diǎn)并進(jìn)行管理。

2.5 多線程斷點(diǎn)

一個(gè)線程只能被一個(gè)斷點(diǎn)阻塞鸽素,所以不存在在多個(gè)斷點(diǎn)間切換的問(wèn)題蹄咖。
如果在不同的線程都打了斷點(diǎn),且都處于阻塞中付鹿,那如何切換不同的阻塞線程呢澜汤?
在Frames頁(yè)面點(diǎn)擊頂部的下拉框,下拉部分展示了當(dāng)前的線程信息舵匾,其中包含了正在查看的阻塞線程(紅色對(duì)勾項(xiàng))和其他正被斷點(diǎn)阻塞的線程(紅點(diǎn)項(xiàng))俊抵,選擇其他線程并點(diǎn)擊,則可以切換查看阻塞的其他線程坐梯。


圖2-9 切換不同的阻塞線程

2.6 屏蔽所有斷點(diǎn)

點(diǎn)擊Mute Breakpoints 按鈕可以快速屏蔽所有斷點(diǎn)徽诲,這避免了刪除辛辛苦苦添加的斷點(diǎn)。


圖2-10 屏蔽所有斷點(diǎn)按鈕

3. 跟進(jìn)調(diào)試

圖3-1 調(diào)試界面菜單

上圖是調(diào)試界面的菜單按鈕砚殿,下面從左向右依次介紹各按鈕的功能囤锉。

  1. Show Execution Point 點(diǎn)擊該按鈕可以快速定位到正在中斷的代碼位置床嫌。
  2. Step Over 這個(gè)是單步調(diào)試,可在斷點(diǎn)處一行一行的執(zhí)行代碼
  3. Step Into 點(diǎn)擊這個(gè)按鈕可以進(jìn)入到當(dāng)前行的方法內(nèi)部
  4. Force Step Into 使用Step Info按鈕無(wú)法進(jìn)入到某些jdk方法中钱贯,此時(shí)可以用這個(gè)按鈕
  5. Step Out 這個(gè)和Step Into 功能相反,會(huì)從當(dāng)前正在執(zhí)行的方法返回
  6. Drop Frame 丟棄當(dāng)前幀侦另,這會(huì)使斷點(diǎn)回到當(dāng)前方法調(diào)用前的位置秩命。需要注意的是,雖然調(diào)用棸担可以回滾弃锐,但是已經(jīng)影響的變量數(shù)據(jù)并不會(huì)還原。低版本的Android Studio可能不支持這個(gè)功能殿托,我所用的4.0.2上這個(gè)按鈕是灰色的霹菊,不支持點(diǎn)擊。
  7. Run to Cursor 點(diǎn)擊這個(gè)按鈕會(huì)執(zhí)行到光標(biāo)所在的行支竹。

以上功能都存在快捷鍵旋廷,或者可以自定義快捷鍵。熟記并使用快捷鍵可以有效提高調(diào)試效率唾戚。除此之外還有其他僅提供快捷鍵的調(diào)試工具柳洋,可以通過(guò)查看快捷鍵表去了解。

4. 問(wèn)題列表

4.1 上文中提到的某些窗口看不到

在Debug窗口的右上方點(diǎn)擊這個(gè)按鈕叹坦,即可打開或關(guān)不指定的窗口熊镣。


圖4-1 Debug模式內(nèi)的窗口管理

4.2 如何調(diào)試Release包?

可以參考這篇文章募书。

4.3 設(shè)備問(wèn)題

在華為設(shè)備上绪囱,如果斷點(diǎn)在生命周期方法上,那么幾秒后應(yīng)用就會(huì)崩潰從而無(wú)法繼續(xù)調(diào)試莹捡。此時(shí)可以采用非中斷斷點(diǎn)鬼吵,在斷點(diǎn)處添加log或修改變量進(jìn)行調(diào)試。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末篮赢,一起剝皮案震驚了整個(gè)濱河市齿椅,隨后出現(xiàn)的幾起案子琉挖,更是在濱河造成了極大的恐慌,老刑警劉巖涣脚,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件示辈,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡遣蚀,警方通過(guò)查閱死者的電腦和手機(jī)矾麻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)芭梯,“玉大人险耀,你說(shuō)我怎么就攤上這事【链” “怎么了甩牺?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)芒涡。 經(jīng)常有香客問(wèn)我柴灯,道長(zhǎng),這世上最難降的妖魔是什么费尽? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任赠群,我火速辦了婚禮,結(jié)果婚禮上旱幼,老公的妹妹穿的比我還像新娘查描。我一直安慰自己,他們只是感情好柏卤,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布冬三。 她就那樣靜靜地躺著,像睡著了一般缘缚。 火紅的嫁衣襯著肌膚如雪勾笆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天桥滨,我揣著相機(jī)與錄音窝爪,去河邊找鬼。 笑死齐媒,一個(gè)胖子當(dāng)著我的面吹牛蒲每,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播喻括,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼邀杏,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了唬血?” 一聲冷哼從身側(cè)響起望蜡,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤唤崭,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后泣特,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體浩姥,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年状您,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兜挨。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡膏孟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拌汇,到底是詐尸還是另有隱情柒桑,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布噪舀,位于F島的核電站魁淳,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏与倡。R本人自食惡果不足惜界逛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望纺座。 院中可真熱鬧息拜,春花似錦、人聲如沸净响。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)馋贤。三九已至赞别,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間配乓,已是汗流浹背仿滔。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留扰付,地道東北人堤撵。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像羽莺,于是被迫代替她去往敵國(guó)和親实昨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

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