使用調試器

此頁的詳細信息使用LLDBGDB的OS開發。對於應用程序開發,請參閱調試您的應用程序,而不是,這也解釋了如何使用Android Studio的GUI(基於LLDB)。

GDB 已棄用,很快將被刪除。如果你從GDB切換到LLDB,你應該通過閱讀開始LLDB教程。如果你是一個專家GDB用戶的GDB到LLDB命令地圖是非常有幫助的,而轉變。

先決條件

要使用調試器:

  • 建立與通常的編譯環境envsetup.sh命令。
  • 運行相同的lunch ,你建設時使用的命令。

對於設置環境的更多幫助,請參閱設置環境

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

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

gdbclient.py -p 1234

該腳本設置端口轉發,在設備上啟動相應的遠程調試存根,在主機上啟動調試器,將其配置為查找符號,並將其連接到遠程調試存根。

調試本機進程啟動

要因為它啟動時,使用調試進程gdbclient.py-r選項。例如,調試ls /bin ,在主機上運行以下命令:

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

然後,輸入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 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棉花糖和較低的
    adb shell setprop debug.db.uid 999999
    

在通常的崩潰輸出的末尾, debuggerd提供複製和粘貼在logcat的說明顯示如何將調試器連接到崩潰的過程。

無符號調試

對於32位ARM,如果你沒有符號, gdb不能確定哪個指令集它的拆卸(ARM或Thumb)。要指定在缺少符號信息時選擇為默認的指令集,請設置以下屬性:

set arm fallback-mode arm  # or thumb

使用 VS Code 進行調試

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

使用VS代碼調試之前,安裝CodeLLDB擴展

使用 VS Code 調試代碼:

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

    這將打印JSON對象和lldbclient.py繼續運行。這是預期的;不殺lldbclient.py程序。

    -r標誌必須是最後的標誌,如果它是標誌是如何通過工具解析目前因。

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