還在用 Debug Run 按鈕?試試這些除錯技巧 | 掘金技術徵文

承香墨影發表於2017-05-14

版權宣告:

本賬號釋出文章均來自公眾號,承香墨影(cxmyDev),版權歸承香墨影所有。

未經允許,不得轉載。

一、前言

在實際開發過程中,如果碰到 Bug ,必然免不了需要列印輸出一些 Log 資訊,或者直接進入 Debug 模式進行除錯。而在 Android Studio 中,其實也提供了非常便利的進入 Debug 模式的方法。但是有些時候也不太方便,例如需要重新執行一下,如果專案比較大的話,可能會導致編譯執行的時間佔據了我們查詢 Bug 的大部分時間。

本文就這個問題,介紹一下在需要的時候,如何快速的進入 Debug 除錯狀態。

二、常規模式

在 Android Studio 中,其實已經提供了非常便利的 Debug 的方式。

還在用 Debug Run 按鈕?試試這些除錯技巧 | 掘金技術徵文

這個幫助的除錯條上,已經包含了我們正常需要使用的所有功能,包括 : Run 、Debug、Attach debugger to Android Process。我們將它展開來看一下。

還在用 Debug Run 按鈕?試試這些除錯技巧 | 掘金技術徵文

Run 按鈕 就沒什麼好說的了,點選直接執行我們的專案App到目標裝置上。而點選 Debug 按鈕,就會以 Debug 的模式執行我們的專案 App 到目標裝置上,這個時候如果我們打上了斷點,在執行到斷點程式碼的時候,就會被斷住。

而 Attach debugger to Android Process 是一個非常方便的功能,正如它的英文描述,它可以選擇當前連結的裝置上,處於執行狀態下,並且可以被 Debug 的程式,將它掛上 Debug 模式。

還在用 Debug Run 按鈕?試試這些除錯技巧 | 掘金技術徵文

當 Attach 成功之後,你選擇的 Process 就處於 Debug 模式下,可以進行斷點等 Debug 操作。

三、高階操作

雖然 Attach debugger to Android Process 非常的方便好用,可以節約我們再一次 Debug 執行的時間,並且可以直接掛載一個 Debug 狀態下的執行緒。

但是它也是有缺陷的:

如果需要除錯的斷點,在執行的時機比較靠前的話,例如:除錯 Application.onCreate() 的程式碼,我們就沒法使用這種 Attach 的方式,掛載一個程式進行除錯了。

而通常來說,我們查詢 Bug 經常需要多次 Debug 來定位問題。而如果使用 Debug 按鈕來執行除錯 App 的話,也會非常的耽誤時間。

那麼有沒有辦法讓我們能及時的使用 Attach debugger to Android Process 的方式掛載上除錯程式呢?

還記得當我們使用 Debug Run 除錯 App 的時候,會出現一個 Waiting For Debugger 的對話方塊,這個對話方塊就是一個等待除錯App 程式被掛載的等待對話。

還在用 Debug Run 按鈕?試試這些除錯技巧 | 掘金技術徵文

那麼實際上,我們只需要讓其執行的時候,等待我們去 Attach 這個程式即可。

1、am 命令設定除錯應用

其實 adb 的 am 命令中,就有設定某個 App 以 Debug 的方式執行,命令也非常的簡單。

adb shell am set-debug-app -w <package_name>

其中:

  • set-debug-app : 用於設定待 Debug 的App。
  • -w: 表示設定為 wait 狀態,在程式被啟動的時候,等待 Debugger 進行除錯。
  • :就非常好理解了,為我們需要除錯的 App。

這樣,當我們再次執行 指定的 App 的時候,就會出現上面的 Waiting For Debugger 視窗,一直處於堵塞狀態,直到我們使用 Attach debugger to Android Process 的方式將其掛載上。

而這種方式是一次性的,再次執行就會恢復之前的狀態。但是就像前面說的,經常需要重複多次的 Debug 才能定位問題並且解決問題,那麼多次除錯則在所難免,如果每次都需要執行這個命令,明顯更麻煩了,有點得不償失。

其實 set-debug-app 還提供了一個 —persistent 的引數,設定一個需要持續除錯的 App。

完整的命令如下:

adb shell am set-debug-app -w --persistent <package_name>

當使用 —persistent 標記之後,這個 App 就會一直被處於除錯模式來執行,所以每次啟動就會彈出 Waiting For Debugger 的視窗等待我們,哪怕我們解除安裝重新安裝,也不會改變。當然如果我們安裝一個 Release 簽名的同名 App ,必然不會處於Debug模式。

如果新增了 —persistent 引數之後,除錯完成之後,還需要使用 clear-debug-app 來清理被標記為 debug 的 App。

完整的命令如下:

adb shell am clear-debug-app

而這些,都是可以在 am 的文件中找到答案的,am 其實提供了很多非常好用的工具,方便我們使用。

還在用 Debug Run 按鈕?試試這些除錯技巧 | 掘金技術徵文

二、使用開發者選項

如果你覺得使用 命令列 的工具,還是非常的不方便,那麼其實也是有圖形話介面工具給我們使用的。

我們如果需要除錯裝置,都需要在開發者選項中,開啟 USB 除錯,這是常識。而開發者選項中,提供了設定某個 App 為除錯應用的選項。

進入 開發者選項,找到 『選擇除錯應用』,在其中找到我們需要除錯的 App,然後再開啟『等待偵錯程式』。

還在用 Debug Run 按鈕?試試這些除錯技巧 | 掘金技術徵文

這樣其實和我們使用 am set-debug-app 的方式是一樣的。當然,在使用完成之後,還需要將『等待偵錯程式』的開關關閉,否者會一直等待掛載。

四、結語

最後,我想說,當你在做重複的事情的時候,作為一開發者 ,你需要思考如果跟快捷的完成這項工作,而不是一味的做重複的工作。

還在用 Debug Run 按鈕?試試這些除錯技巧 | 掘金技術徵文
公眾號二維碼.jpg

相關文章