AndroidStudio 除錯技巧
附著除錯(Attach Debuger)
這個名詞不搜一下還真不知道。但是確實是大大的實用。

Attach Debuger
就是這個東西。
我們常常除錯程式的時候就是點 Debug app 按鈕,有時候點了 Run 之後發現效果不對,想除錯一下,然後又點 Debug 按鈕重新編譯了一遍,非常耗時間,這時候就要用到 Attach debug 了。
Attach debug 是在你手機連上 AS 之後,開啟了你的手機程式,然後點選 Attach debug 按鈕,就可以進入斷點除錯狀態的功能。不需要重新 run 一遍(前提是你的程式碼和 APP 是同步的),也不需要點選 Debug 按鈕編譯,只要點選了 Attach Debug 之後就可以開始你的除錯了。
條件斷點

條件斷點.png
上圖不知道有小夥伴用過沒,我們打了斷點之後,在斷點上右鍵就可以看到截圖中的介面。裡面的 conditions 可以很容易的理解就是條件。這就是用來觸發條件斷點的。
舉個例子:假如你有一個 for 迴圈,你想讓他跑到第五遍的時候停下來進入斷點開始除錯,就輸入 i==5
然後done,他就會在滿足條件 i==5
的時候停下進入斷點除錯。
日誌斷點
接條件斷點圖片可以看到左下角有 More ,在裡面可以有更多的屬性選擇。比如說我們想在這斷點處打日誌,但是程式已經跑起來了,我們又不需要停下來。那麼這個時候可以接上兩步學習的內容融合一下。
首先開啟 Attach debug。然後在你想輸出日誌的地方打上斷點,右鍵,點選左下角的 More,讓我們來編輯一下。

日誌斷點
開啟 More 之後我們可以看到展開了更多的屬性,我們選上 Log Message to console 和 Evaluate and log,輸入日誌資訊。然後他就會觸發斷點的時候列印日誌到 logcat 上了。但是我們只想要列印日誌,不想進入 debug 模式怎麼辦?那麼我們只要把 Suspend 取消掉,他就不會暫停下來進入 debug 模式,而是會繼續跑下去。這樣你就可以繼續跑程式同時隨時輸出你想要的日誌資訊了。
大家也可以探究一下其他屬性功能。
setValue
setValue 這是在進入 debug 模式後,對某些引數當前值直接進行更改生效的方法。如圖下圖。

setValue
進入 debug 模式之後,假如說我們希望 i = 10 而不是 = 0,這時候只要右鍵或者 F2 就能對他重新賦值,賦值後 i 的值會一直生效影響到後面的程式的執行。假如說在這裡 for 迴圈要小於10,而我的 i = 10 了,那麼他就會跳出迴圈。
這可以應用在某些場景,比如:你發現結果不是很對的時候,希望套入某些值(預設正確的值)進入去計算,然後跑下去就知道程式是否正確。
Evaluate

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

1540099000187.png
如果返回值是物件,結果也能展開,大家嘗試一下就知道了。
此外還有些實用的小技巧,例如
- 快捷鍵 ctrl+H 可以展開繼承關係。
- ctrl+左鍵,點選呼叫的方法跳轉到方法內部,點選方法名跳轉到被呼叫的地方(類似於 find usages)
- 點選介面左邊的圖示可以檢視哪裡實現了該介面。
這些小技巧配合閱讀原始碼除錯程式食用更佳。