本頁詳細介紹了使用LLDB或GDB進行 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
。例如,要調試ls /bin
,請在主機上運行:
gdbclient.py -r /system/bin/ls /bin
然後,在調試器的提示符下輸入continue
。
調試應用啟動
有時您想在應用程序啟動時對其進行調試,例如當發生崩潰時,您想單步執行代碼以查看崩潰前發生的情況。附加在某些情況下有效,但在其他情況下是不可能的,因為應用程序在您附加之前就崩潰了。 logwrapper
方法(用於strace
)並不總是有效,因為應用程序可能沒有打開端口的權限,而gdbserver
繼承了該限制。
要調試應用程序啟動,請使用設置中的開發人員選項來指示應用程序等待 Java 調試器附加:
- 轉到Settings > Developer options > Select debug app並從列表中選擇您的應用程序,然後單擊Wait for debugger 。
- 啟動應用程序,無論是從啟動器還是使用命令行運行:
adb shell am start -a android.intent.action.MAIN -n APP_NAME/.APP_ACTIVITY
- 等待應用程序加載並出現一個對話框,告訴您應用程序正在等待調試器。
- 正常附加
gdbserver
/gdbclient
,設置斷點,然後繼續該過程。
要讓應用程序運行,請附加 Java Debug Wire Protocol (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
在 logcat 中提供複製和粘貼指令,顯示如何將調試器連接到崩潰的進程。
無符號調試
對於 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 調試代碼:
- 確保運行
gdbclient.py
或lldbclient.py
所需的所有構建工件(例如符號)都存在。 - 運行以下命令:
lldbclient.py --setup-forwarding vscode-lldb ANY_OTHER_FLAGS -p pid | -n proc-name | -r ...
這將打印一個 JSON 對象並且
lldbclient.py
繼續運行。這是意料之中的;不要殺死lldbclient.py
程序。由於工具解析標誌的方式,
-r
標誌必須是最後一個標誌。 - 在 VS Code 的調試選項卡中,選擇add configuration ,然後選擇LLDB: Custom Launch 。這將打開一個
launch.json
文件並將一個新的 JSON 對象添加到列表中。 - 刪除新添加的調試器配置。
- 複製
lldbclient.py
打印的 JSON 對象,粘貼到剛剛刪除的對像中。保存更改。 - 要重新加載窗口以刷新調試器列表,請按Ctrl+Shift+P並鍵入
reload window
。 - 選擇新的調試器配置並按下運行。調試器應在 10 到 30 秒後連接。
- 完成調試後,進入運行
lldbclient.py
的終端並按Enter 鍵結束lldbclient.py
程序。