使用偵錯工具

本頁面說明如何使用 LLDB 提供資訊 以便進行 OS 開發工作 如要開發應用程式,請參閱 為應用程式偵錯 ,其中會說明如何使用 Android Studio GUI (以 LLDB 為基礎)。

我們不再支援或提供 GDB。如果您是從 GDB 切換到 LLDB, 請先閱讀 LLDB 教學課程。 如果您是 GDB 專業使用者, GDB 到 LLDB 指令對應 這對於移轉資料集非常有用

必要條件

如何使用偵錯工具:

  • 使用一般的 envsetup.sh 指令設定建構環境。
  • 執行您在建構時使用的同一個 lunch 指令。請注意,午餐選項是 必須與待偵錯裝置完全相符 如果午餐項目與連接的裝置不符,系統會顯示錯誤訊息: You used the wrong lunch: TARGET_PRODUCT (aosp_arm64) does not match attached device (xyzabc)
  • 將裝置連接到電腦。

如需更多設定環境的說明,請參閱 設定環境

對二進位檔進行偵錯

如要對機器上建構的二進位檔進行偵錯,請先將二進位檔複製到裝置 然後啟動偵錯工具例如:

adb push test.exe /data/local/tmp/test.exe
lldbclient.py --port 5038 -r /data/local/tmp/test.exe

對執行中的應用程式或程序進行偵錯

如要連線至執行中的應用程式或原生 Daemon,請使用 使用 PID 的 lldbclient.py。例如,使用 PID 對程序偵錯 1234,在主機上執行這個程式碼:

lldbclient.py -p 1234

這個指令碼會設定通訊埠轉送、啟動適當的 裝置上的遠端偵錯虛設常式,啟動偵錯工具 將主機設為尋找符號 至遠端偵錯虛設常式

對原生程序啟動進行偵錯

如要在程序啟動時進行偵錯,請搭配 -r 使用 lldbclient.py 如果有需要 SQL 指令的分析工作負載 則 BigQuery 可能是最佳選擇舉例來說,如要對 ls /bin 偵錯,請在主機上執行這個程式碼:

lldbclient.py -r /system/bin/ls /bin

接著,在偵錯工具的提示中輸入 continue

對應用程式啟動作業進行偵錯

有時您會想在應用程式啟動時進行偵錯,例如發生當機時 並想逐步執行程式碼,以查看當機「之前」發生的情況。 附加功能在某些情況下適用,但在某些情況下 不可能的原因是,應用程式在附加檔案前就當機。 logwrapper 方法 (用於 strace) 因為應用程式可能沒有 且 lldbserver 會沿用 第二則是資源限制

如要對應用程式啟動進行偵錯,請透過「設定」中的開發人員選項指示 應用程式,等待系統附加 Java 偵錯工具:

  1. 前往「設定」>開發人員選項 >選取偵錯應用程式,然後選擇 再點選「等待偵錯工具」
  2. 從啟動器啟動應用程式,或使用指令列啟動應用程式:
    adb shell am start -a android.intent.action.MAIN -n APP_NAME/.APP_ACTIVITY
    
  3. 等待應用程式載入,並顯示對話方塊,告知應用程式 等待偵錯工具
  4. 正常附加 lldbserver/lldbclient (已設定) 然後繼續該程序

如要讓應用程式執行,請附加 Java 偵錯傳輸通訊協定 (JDWP) Java Debugger (jdb) 等偵錯工具:

adb forward tcp:12345 jdwp:XXX  # (Where XXX is the PID
of the debugged process.)
jdb -attach localhost:12345

對當機的應用程式或程序進行偵錯

如要讓 debuggerd 暫停當機的程序,以便您可以 附加偵錯工具,設定適當的屬性:

  • Android 11 之後
    adb shell setprop debug.debuggerd.wait_for_debugger true
    
  • Android 11 以下版本
    adb shell setprop debug.debuggerd.wait_for_gdb true
    
  • Android 6.0 (Marshmallow) 以下版本
    adb shell setprop debug.db.uid 999999
    

平常的當機輸出內容結束時,debuggerd 會提供複製及貼上功能 說明如何將偵錯工具連結至當機處理程序的操作說明。

使用 VS Code 進行偵錯

LLDB 支援 Visual Studio Code。 您可以使用 VS Code 偵錯工具前端 (而非 LLDB CLI 介面) 來控制及 針對在裝置上執行的原生程式碼進行偵錯。

使用 VS Code 偵錯前,請先安裝 CodeLLDB 擴充功能

使用 VS Code 對程式碼偵錯:

  1. 確保執行所需的所有建構成果 (例如符號) 有lldbclient.pylldbclient.py存在。
  2. 在 VS Code 中,按 Ctrl+Shift+P 執行指令,搜尋偵錯: 新增設定...,然後選取 LLDB。 系統會開啟 launch.json 檔案,並將新的 JSON 物件加入清單中。
  3. 將新增的偵錯工具設定換成兩行註解: // #lldbclient-generated-begin// #lldbclient-generated-end,因此 設定清單看起來會像這樣:
    "configurations": [
        // #lldbclient-generated-begin
        // #lldbclient-generated-end
    ]

    lldbclient.py 會使用這些註解來偵測資料的寫入位置。如果有 ,請將註解行新增至其他設定之後的結尾。

  4. 在您執行 envsetup.sh 並已安裝的終端機中執行下列指令 lunch:
    lldbclient.py --setup-forwarding vscode-lldb \
          --vscode-launch-file LAUNCH_JSON_PATH \
          ANY_OTHER_FLAGS -p pid | -n proc-name | -r ...

    lldbclient.py 會將產生的設定寫入 launch.json 和 繼續放送這是可預期的情況;而不要終止 lldbclient.py 程式。如果發生以下情況: 省略 --vscode-launch-file,指令碼會輸出 JSON 程式碼片段 請手動複製並貼到 launch.json

    如果 -r 旗標是因旗標剖析方式而存在的最後一個標記,則該旗標必須是最後一個標記 都是由工具直接提供

  5. 開啟「Run and Debug」側邊列,新的設定應該會顯示在 偵錯工具清單按下「Start Debugging (F5)」。偵錯工具將在 10 到 30 秒

    如果新的設定沒有顯示在「Run and Debug」檢視畫面中,請重新載入視窗以 重新整理偵錯工具清單:按下 Ctrl+Shift+P 鍵,然後輸入 reload window

  6. 偵錯完成後,請前往正在執行的終端機 lldbclient.py,然後按 Enter 鍵結束 lldbclient.py計畫。後續執行指令碼就會產生設定 請參考#lldbclient-generated註解和取代舊內容,但請勿這麼做 必須手動移除。

如要為產生的啟動設定新增自訂屬性,可以使用 --vscode-launch-props 標記。例如:

lldbclient.py --setup-forwarding vscode-lldb \
    --vscode-launch-props \
    '{"initCommands" : ["script print(\"Hello\")"], "preLaunchTask" : "Build"}' \
    ...
範例屬性會使 VS Code 在偵錯之前執行名為 Build 的工作,並 將新的偵錯初始化步驟附加到指令碼產生的步驟。您可以在 您可以在「管理」分頁中 VS Code 說明文件以及 CodeLLDB 擴充功能