Android Studio for Platform (ASfP) 提供強大的偵錯工具,可讓您執行下列操作:
- 選取要偵錯的裝置。
- 在 Java、Kotlin、C/C++ 和 Rust 程式碼中設定中斷點。
- 在執行階段檢查變數及評估運算式。
使用偵錯工具前,請務必將建構版本刷入裝置或模擬器。
應用程式程序 (Java/Kotlin) 偵錯
如要對 Java 或 Kotlin 應用程式程序進行偵錯,請按照下列步驟操作:
在 ASfP 的 Java 或 Kotlin 程式碼中設定中斷點。
在選單中依序選取「Run」>「Attach Debugger to Android Process」。
在「Choose Process」對話方塊中,確認「Debug type」已設為「Java Only」。
從清單中選取裝置。
選擇要偵錯的特定應用程式程序。
按一下「OK」。
與裝置上的應用程式互動,觸發中斷點。
系統程序 (C/C++) 偵錯
如要對以 C 或 C++ 編寫的系統程序進行偵錯,請按照下列步驟操作:
確認您只執行一部裝置或模擬器。
開啟終端機,然後從 AOSP 結帳根目錄執行
adb root:bash adb root
在 ASfP 內設定 C/C++ 程式碼的中斷點。
在選單中依序選取「Run」>「Attach Debugger to Android Process」。
在「Choose Process」對話方塊中,將「Debug type」變更為「Native Only」或「Dual (Java + Native)」。
勾選「顯示所有程序」方塊,即可查看系統程序。
從清單中選取裝置。
選擇要偵錯的特定系統程序 (例如
surfaceflinger或system_server)。按一下「OK」。
與裝置互動,觸發中斷點。
Rust 偵錯
ASfP 支援使用偵錯轉接程式通訊協定 (DAP) 和 LLDB 進行 Rust 偵錯。 本節說明如何將 CodeLLDB 設為 Debug Adapter Server,並在主機和 Android 裝置上偵錯 Rust 程式碼。
將 CodeLLDB 設為偵錯轉接程式伺服器
建立新的「Debug Adapter Protocol」執行/偵錯設定:
- 在選單中依序選取「Run」>「Edit Configurations」。
- 按一下「+」按鈕。
- 選取「Debug Adapter Protocol」(偵錯介面卡通訊協定)。
在伺服器分頁中,按一下「建立新伺服器」。
在開啟的新對話方塊中,按一下「選擇範本」,然後從清單中選取「CodeLLDB」。
選取 CodeLLDB 範本後,系統會新增伺服器,並預先定義設定。
- 在「追蹤」下拉式選單中選取「詳細」,即可啟用詳細追蹤功能。
- 新增環境變數,指定 Android 來源預先建構的
lldb-server路徑:
LLDB_DEBUGSERVER_PATH=REPO_ROOT/prebuilts/clang/host/linux-x86/CLANG_VERSION/runtimes_ndk_cxx/x86_64/lldb-server ``` Replace `REPO_ROOT` with the absolute path to your Android source checkout. To find `CLANG_VERSION`, run the `get_clang_version.py` script from the root of your Android source tree: ```bash ./build/soong/scripts/get_clang_version.py- 請勿變更
<<insert base directory>>區段。
在主機上偵錯 Rust 二進位檔
- 在偵錯轉接程式通訊協定執行/偵錯設定中,開啟「Configuration」分頁。
- 將「Debug Mode」(偵錯模式) 設為「Launch」(啟動)。
- 更新「工作目錄」,然後選取要偵錯的「二進位檔」。
- 按一下「確定」儲存設定。
- 按一下設定旁的「Debug」圖示,開始偵錯工作階段。
首次執行時,CodeLLDB 會下載。控制台中應會顯示 DAP 追蹤記錄。Rust 程式碼中設定的中斷點應會如預期觸發。
在 Android 裝置上偵錯 Rust 二進位檔 (附加模式)
找出 PID:找出要在 Android 裝置上偵錯的應用程式程序 ID (PID)。
在裝置上啟動 lldb-server:從 Android 來源樹狀結構簽出的根目錄,執行
lldbclient.py指令碼,並以程序 ID 取代<PID>:lldbclient.py --setup-forwarding vscode-lldb -p <PID>這個指令碼會將正確的
lldb-server推送至裝置、啟動該lldb-server、設定通訊埠轉送 (主機通訊埠 5039 至裝置),並輸出後續步驟所需的 DAP JSON 設定。請將這個終端機保持為開啟狀態。在主機上啟動 CodeLLDB 偵錯配接器:
- 前往 CodeLLDB 擴充功能目錄 (預設為:
~/.lsp4ij/dap/codelldb/extension/adapter)。 - 設定必要的環境變數並啟動轉接程式伺服器,然後根據伺服器設定,替換
REPO_ROOT和CLANG_VERSION:
# Sets PYTHONHOME env variable export PYTHONHOME=REPO_ROOT/prebuilts/clang/host/linux-x86/CLANG_VERSION/python3 # Tell the dynamic linker where to find python libs export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:REPO_ROOT/prebuilts/clang/host/linux-x86/CLANG_VERSION/python3/lib # Starts the CodeLLDB Debugger Adapter server on port 1234 ./codelldb --liblldb REPO_ROOT/prebuilts/clang/host/linux-x86/CLANG_VERSION/lib/liblldb.so --port 1234- 前往 CodeLLDB 擴充功能目錄 (預設為:
設定 ASfP DAP 用戶端:
- 返回 ASfP 中的 Debug Adapter Protocol Run/Debug 設定。
- 選取「設定」分頁標籤。
- 將「Debug Mode」(偵錯模式) 設為「Attach」(附加)。
- 將「Address」(地址) 設為
localhost。 - 將「Port」(通訊埠) 設為
1234。 - 將
lldbclient.py指令 (步驟 2) 的 JSON 輸出內容,貼到「DAP parameters (JSON)」欄位。
按一下「Debug」,開始偵錯工作階段。
疑難排解
- 如果看到
error: Connection shut down by remote side while waiting for reply to initial handshake packet錯誤,請終止目前的偵錯工作階段,然後重新啟動裝置上的lldb-server和主機上的 CodeLLDB 配接器。