附著調(diào)試(Attach Debuger)
這個(gè)名詞不搜一下還真不知道。但是確實(shí)是大大的實(shí)用。
就是這個(gè)東西。
我們常常調(diào)試程序的時(shí)候就是點(diǎn) Debug app 按鈕,有時(shí)候點(diǎn)了 Run 之后發(fā)現(xiàn)效果不對,想調(diào)試一下,然后又點(diǎn) Debug 按鈕重新編譯了一遍,非常耗時(shí)間,這時(shí)候就要用到 Attach debug 了。
Attach debug 是在你手機(jī)連上 AS 之后,開啟了你的手機(jī)程序,然后點(diǎn)擊 Attach debug 按鈕,就可以進(jìn)入斷點(diǎn)調(diào)試狀態(tài)的功能。不需要重新 run 一遍(前提是你的代碼和 APP 是同步的),也不需要點(diǎn)擊 Debug 按鈕編譯,只要點(diǎn)擊了 Attach Debug 之后就可以開始你的調(diào)試了。
條件斷點(diǎn)

上圖不知道有小伙伴用過沒,我們打了斷點(diǎn)之后,在斷點(diǎn)上右鍵就可以看到截圖中的界面。里面的 conditions 可以很容易的理解就是條件。這就是用來觸發(fā)條件斷點(diǎn)的。
舉個(gè)例子:假如你有一個(gè) for 循環(huán),你想讓他跑到第五遍的時(shí)候停下來進(jìn)入斷點(diǎn)開始調(diào)試,就輸入 i==5 然后done,他就會(huì)在滿足條件 i==5 的時(shí)候停下進(jìn)入斷點(diǎn)調(diào)試。
日志斷點(diǎn)
接條件斷點(diǎn)圖片可以看到左下角有 More ,在里面可以有更多的屬性選擇。比如說我們想在這斷點(diǎn)處打日志,但是程序已經(jīng)跑起來了,我們又不需要停下來。那么這個(gè)時(shí)候可以接上兩步學(xué)習(xí)的內(nèi)容融合一下。
首先打開 Attach debug。然后在你想輸出日志的地方打上斷點(diǎn),右鍵,點(diǎn)擊左下角的 More,讓我們來編輯一下。

打開 More 之后我們可以看到展開了更多的屬性,我們選上 Log Message to console 和 Evaluate and log,輸入日志信息。然后他就會(huì)觸發(fā)斷點(diǎn)的時(shí)候打印日志到 logcat 上了。但是我們只想要打印日志,不想進(jìn)入 debug 模式怎么辦?那么我們只要把 Suspend 取消掉,他就不會(huì)暫停下來進(jìn)入 debug 模式,而是會(huì)繼續(xù)跑下去。這樣你就可以繼續(xù)跑程序同時(shí)隨時(shí)輸出你想要的日志信息了。
大家也可以探究一下其他屬性功能。
setValue
setValue 這是在進(jìn)入 debug 模式后,對某些參數(shù)當(dāng)前值直接進(jìn)行更改生效的方法。如圖下圖。

進(jìn)入 debug 模式之后,假如說我們希望 i = 10 而不是 = 0,這時(shí)候只要右鍵或者 F2 就能對他重新賦值,賦值后 i 的值會(huì)一直生效影響到后面的程序的執(zhí)行。假如說在這里 for 循環(huán)要小于10,而我的 i = 10 了,那么他就會(huì)跳出循環(huán)。
這可以應(yīng)用在某些場景,比如:你發(fā)現(xiàn)結(jié)果不是很對的時(shí)候,希望套入某些值(預(yù)設(shè)正確的值)進(jìn)入去計(jì)算,然后跑下去就知道程序是否正確。
Evaluate

Evaluate 就是上圖中的上方箭頭所指的小窗。Evaluate 和 debug 模式下的 + 號(hào)功能上差不多,只不過他是彈窗式彈出來,而且是一次性的。下面的 + 號(hào)更多是類似一種 watcher 的作用。
在監(jiān)測某些返回值或者某些執(zhí)行結(jié)果的變化的時(shí)候我會(huì)用 + 號(hào)更多。在做一些主動(dòng)性嘗試的時(shí)候則是用 Evaluate 更多。例如,上面我 setValue 更改了某些數(shù)值,但是我此時(shí)有好幾個(gè)公式想知道執(zhí)行結(jié)果,不知道哪個(gè)公式才是正確的。只需要點(diǎn)擊小窗,就可以在上面執(zhí)行語句。觀察結(jié)果。

如果返回值是對象,結(jié)果也能展開,大家嘗試一下就知道了。
此外還有些實(shí)用的小技巧,例如
- 快捷鍵 ctrl+H 可以展開繼承關(guān)系。
- ctrl+左鍵,點(diǎn)擊調(diào)用的方法跳轉(zhuǎn)到方法內(nèi)部,點(diǎn)擊方法名跳轉(zhuǎn)到被調(diào)用的地方(類似于 find usages)
- 點(diǎn)擊接口左邊的圖標(biāo)可以查看哪里實(shí)現(xiàn)了該接口。
這些小技巧配合閱讀源碼調(diào)試程序食用更佳。