偵錯平台代碼

Android Studio for Platform (ASfP) 提供強大的偵錯工具,可讓您執行下列操作:

  • 選取要偵錯的裝置。
  • 在 Java、Kotlin、C/C++ 和 Rust 程式碼中設定中斷點。
  • 在執行階段檢查變數及評估運算式。

使用偵錯工具前,請務必將建構版本刷入裝置或模擬器。

應用程式程序 (Java/Kotlin) 偵錯

如要對 Java 或 Kotlin 應用程式程序進行偵錯,請按照下列步驟操作:

  1. 在 ASfP 的 Java 或 Kotlin 程式碼中設定中斷點。

  2. 在選單中依序選取「Run」>「Attach Debugger to Android Process」

  3. 在「Choose Process」對話方塊中,確認「Debug type」已設為「Java Only」

  4. 從清單中選取裝置。

  5. 選擇要偵錯的特定應用程式程序。

  6. 按一下「OK」

  7. 與裝置上的應用程式互動,觸發中斷點。

系統程序 (C/C++) 偵錯

如要對以 C 或 C++ 編寫的系統程序進行偵錯,請按照下列步驟操作:

  1. 確認您只執行一部裝置或模擬器。

  2. 開啟終端機,然後從 AOSP 結帳根目錄執行 adb rootbash adb root

  1. 在 ASfP 內設定 C/C++ 程式碼的中斷點。

  2. 在選單中依序選取「Run」>「Attach Debugger to Android Process」

  3. 在「Choose Process」對話方塊中,將「Debug type」變更為「Native Only」或「Dual (Java + Native)」

  4. 勾選「顯示所有程序」方塊,即可查看系統程序。

  5. 從清單中選取裝置。

  6. 選擇要偵錯的特定系統程序 (例如 surfaceflingersystem_server)。

  7. 按一下「OK」

  8. 與裝置互動,觸發中斷點。

Rust 偵錯

ASfP 支援使用偵錯轉接程式通訊協定 (DAP) 和 LLDB 進行 Rust 偵錯。 本節說明如何將 CodeLLDB 設為 Debug Adapter Server,並在主機和 Android 裝置上偵錯 Rust 程式碼。

將 CodeLLDB 設為偵錯轉接程式伺服器

  1. 建立新的「Debug Adapter Protocol」執行/偵錯設定:

    1. 在選單中依序選取「Run」>「Edit Configurations」
    2. 按一下「+」按鈕。
    3. 選取「Debug Adapter Protocol」(偵錯介面卡通訊協定)
  2. 在伺服器分頁中,按一下「建立新伺服器」

  3. 在開啟的新對話方塊中,按一下「選擇範本」,然後從清單中選取「CodeLLDB」

  4. 選取 CodeLLDB 範本後,系統會新增伺服器,並預先定義設定。

    1. 在「追蹤」下拉式選單中選取「詳細」,即可啟用詳細追蹤功能。
    2. 新增環境變數,指定 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
    
    1. 請勿變更 <<insert base directory>> 區段。

在主機上偵錯 Rust 二進位檔

  1. 在偵錯轉接程式通訊協定執行/偵錯設定中,開啟「Configuration」分頁。
  2. 將「Debug Mode」(偵錯模式) 設為「Launch」(啟動)
  3. 更新「工作目錄」,然後選取要偵錯的「二進位檔」
  4. 按一下「確定」儲存設定。
  5. 按一下設定旁的「Debug」圖示,開始偵錯工作階段。

首次執行時,CodeLLDB 會下載。控制台中應會顯示 DAP 追蹤記錄。Rust 程式碼中設定的中斷點應會如預期觸發。

在 Android 裝置上偵錯 Rust 二進位檔 (附加模式)

  1. 找出 PID:找出要在 Android 裝置上偵錯的應用程式程序 ID (PID)。

  2. 在裝置上啟動 lldb-server:從 Android 來源樹狀結構簽出的根目錄,執行 lldbclient.py 指令碼,並以程序 ID 取代 <PID>

    lldbclient.py --setup-forwarding vscode-lldb -p <PID>
    

    這個指令碼會將正確的 lldb-server 推送至裝置、啟動該 lldb-server、設定通訊埠轉送 (主機通訊埠 5039 至裝置),並輸出後續步驟所需的 DAP JSON 設定。請將這個終端機保持為開啟狀態。

  3. 在主機上啟動 CodeLLDB 偵錯配接器:

    • 前往 CodeLLDB 擴充功能目錄 (預設為: ~/.lsp4ij/dap/codelldb/extension/adapter)。
    • 設定必要的環境變數並啟動轉接程式伺服器,然後根據伺服器設定,替換 REPO_ROOTCLANG_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
    
  4. 設定 ASfP DAP 用戶端:

    1. 返回 ASfP 中的 Debug Adapter Protocol Run/Debug 設定。
    2. 選取「設定」分頁標籤。
    3. 將「Debug Mode」(偵錯模式) 設為「Attach」(附加)
    4. 將「Address」(地址) 設為 localhost
    5. 將「Port」(通訊埠) 設為 1234
    6. lldbclient.py 指令 (步驟 2) 的 JSON 輸出內容,貼到「DAP parameters (JSON)」欄位。
  5. 按一下「Debug」,開始偵錯工作階段。

疑難排解

  • 如果看到 error: Connection shut down by remote side while waiting for reply to initial handshake packet 錯誤,請終止目前的偵錯工作階段,然後重新啟動裝置上的 lldb-server 和主機上的 CodeLLDB 配接器。