Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

使用調試器

本頁詳細介紹了使用LLDBGDB進行OS開發。對於應用程序開發,請參閱調試您的應用程序,它解釋瞭如何使用Android Studio GUI(基於LLDB)。

GDB已棄用,不久將被刪除。如果您要從GDB切換到LLDB,則可能應該先閱讀LLDB教程。如果您是GDB的專業用戶,則在過渡期間,從GDB到LLDB的命令映射非常有用。

先決條件

要使用調試器:

  • 使用通常的envsetup.sh命令設置構建環境。
  • 運行您在構建時使用的lunch命令。

有關設置環境的更多幫助,請參閱“設置環境”

調試正在運行的應用程序或進程

要連接到正在運行的應用程序或本機守護程序,請使用帶有PID的gdbclient.py 。例如,要調試使用PID 1234的進程,請運行:

gdbclient.py -p 1234

該腳本設置端口轉發,在設備上啟動適當的遠程調試存根,在主機上啟動調試器,對其進行配置以查找符號,然後將其連接到遠程調試存根。

調試本機進程啟動

要在啟動過程中調試它,請使用帶有-r選項的gdbclient.py

gdbclient.py -r /system/bin/MY_TEST_APP

然後,輸入continue在調試器的提示。

調試應用啟動

有時,您想在啟動某個應用程序時對其進行調試,例如當發生崩潰時,並且您想要單步執行代碼以查看崩潰發生的情況。附加功能在某些情況下是可行的,但在另一些情況下則是不可能的,因為應用程序崩潰後您才可以附加。 logwrapper方法(用於strace )並不總是有效,因為該應用程序可能沒有打開端口的權限,並且gdbserver繼承了該限制。

要調試應用程序啟動,請使用“設置”中的開發人員選項來指示應用程序等待Java調試器附加:

  1. 轉到設置>開發人員選項>選擇調試應用,然後從列表中選擇您的應用,然後點擊等待調試器
  2. 從啟動器或使用命令行運行以啟動應用程序:
    adb shell am start -a android.intent.action.MAIN -n APP_NAME/.APP_ACTIVITY
    
  3. 等待應用程序加載,並出現一個對話框,告訴您應用程序正在等待調試器。
  4. 正常附加gdbserver / gdbclient ,設置斷點,然後繼續該過程。

要運行該應用,請附加一個Java調試線協議(JDWP)調試器,例如Java調試器(jdb):

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

調試崩潰的應用程序或進程

如果希望debuggerd掛起崩潰的進程,以便可以附加調試器,請設置適當的屬性:

  • Android 7.0牛軋糖及更高版本
    
    adb shell setprop debug.debuggerd.wait_for_gdb true
    
  • Android 6.0棉花糖及更低版本的
    adb shell setprop debug.db.uid 999999
    

在通常的崩潰輸出的最後, debuggerd提供有關如何使用以下命令連接調試器的說明:

gdbclient.py -p PID

無符號調試

對於32位ARM,如果沒有符號,則gdb無法確定要反彙編的指令集(ARM或Thumb)。要指定缺少符號信息時默認選擇的指令集,請設置以下屬性:

set arm fallback-mode arm  # or thumb

使用VS代碼進行調試

LLDB支持在Visual Studio Code上調試平台代碼。您可以使用VS Code調試器前端而不是LLDB CLI界面來控制和調試在設備上運行的本機代碼。

在使用VS Code進行調試之前,請安裝CodeLLDB擴展名

要使用VS Code調試代碼,請執行以下操作:

  1. 確保存在運行gdbclient.pylldbclient.py所需的所有構建工件(例如符號)。
  2. 運行以下命令:
    lldbclient.py -p pid | -n proc-name |
    -r ... --setup-forwarding vscode ANY_OTHER_FLAGS

    這將打印一個JSON對象,並且lldbclient.py繼續運行。這是預期的;不要殺死lldbclient.py程序。

  3. 在VS Code的調試選項卡中,選擇添加配置,然後選擇LLDB:自定義啟動。這將打開launch.json文件,並將新的JSON對象添加到列表中。
  4. 刪除新添加的調試器配置。
  5. 複製lldbclient.py打印的JSON對象,並將其粘貼到剛刪除的對像中。保存更改。
  6. 要重新加載窗口以刷新調試器列表,請按Ctrl + Shift + P並輸入reload window
  7. 選擇新的調試器配置,然後按運行。調試器應在10到30秒後連接。
  8. 調試完成後,轉到運行lldbclient.py的終端,然後按Enter鍵以結束lldbclient.py程序。