android gdb 命令大全,ndk-gdb | Android NDK | Android Developers
NDK 包含一個名為 ndk-gdb 的 Shell 腳本,可以啟動命令行原生調試會話。偏好使用 GUI 的用戶則應閱讀在 Android Studio 中調試這篇文檔。
要求
要運行命令行原生調試,必須滿足以下要求:
使用 ndk-build 腳本構建您的應用。ndk-gdb 腳本不支持使用舊的 make APP= 方法進行構建。
在 AndroidManifest.xml 文件中添加可將 android:debuggable 屬性設為 true 的 元素,從而在該文件中啟用應用調試。
構建可在 Android 2.2(Android API 級別 8)或更高版本上運行的應用。
在搭載 Android 2.2 或更高版本的設備或模擬器上進行調試。就調試而言,在 AndroidManifest.xml 文件中聲明哪個目標 API 級別并不重要。
在 Unix shell 中開發您的應用。在 Windows 上,請使用 Cygwin 或實驗性 ndk-gdb-py Python 實現。
使用 GNU Make 3.81 或更高版本。
用法
要調用 ndk-gdb 腳本,請切換到應用目錄或該目錄下的任何目錄。例如:
cd $PROJECT
$NDK/ndk-gdb
其中,$PROJECT 指向您項目的根目錄,$NDK 指向 NDK 安裝路徑。
調用 ndk-gdb 時,它會配置此會話以查找您的源文件以及所生成的原生庫的符號/調試版本。成功附加到您的應用進程后,ndk-gdb 會輸出一長串錯誤消息,表示無法找到各種系統庫。這很正常,因為您的主機并未在目標設備上包含這些庫的符號/調試版本。您可以放心地忽略這些消息。
接下來,ndk-gdb 會顯示一個正常的 GDB 提示。
您可能熟悉與 GNU GDB 的互動方式,與 ndk-gdb 的互動方式與之相同。例如,您可以使用 b 設置斷點,并使用 c(表示“continue”)繼續執行。有關完整的命令列表,請參閱 GDB 手冊。如果您更喜歡使用 LLDB 調試程序,請在調用 ndk-gdb 腳本時使用 --lldb 選項。
請注意,如果您退出 GDB 提示,那么您正在調試的應用進程將停止。此行為是一種 gdb 限制。
ndk-gdb 可處理許多錯誤情況,并會在發現問題時顯示可提供有用信息的錯誤消息。這些檢查包括確保滿足以下條件:
確保 ADB 位于您的路徑中。
確保您的應用已在其清單中聲明為可調試。
確保設備上安裝的具有相同軟件包名稱的應用同樣可調試。
默認情況下,ndk-gdb 會搜索已在運行的應用進程;如果沒有搜索到,則會顯示相應的錯誤。不過,您可以使用 --start 或 --launch= 選項在調試會話前自動啟動您的 Activity。有關詳情,請參閱選項。
選項
要查看完整的選項列表,請在命令行中輸入 ndk-gdb --help。表 1 顯示了許多比較常用的選項及其簡要說明。
表 1. 常用 ndk-gdb 選項及其說明。
在指定了此選項的情況下啟動 ndk-gdb,將會啟動應用清單中列出的第一個可啟動 Activity。使用 --launch= 可啟動下一個可啟動的 Activity。要轉儲可啟動 Activity 的列表,請從命令行運行 --launch-list。選項
說明>
--lldb
如果設置了此項,該腳本將對會話使用 LLDB 調試程序,而不是 gdb。
--verbose
此選項指示構建系統打印有關原生調試會話設置的詳細信息。僅在調試程序無法連接到應用且 ndk-gdb 顯示的錯誤消息不充分時,才需要用它解決調試問題。
--force
默認情況下,如果 ndk-gdb 發現同一設備上已有另一個原生調試會話在運行,它將會中止運行。此選項將終止另一個會話,并將其替換為新的會話。請注意,此選項不會終止正在被調試的實際應用,您必須另行終止它。
--start
當您啟動 ndk-gdb 時,默認情況下,它會嘗試附加到您的應用在目標設備上的現有運行實例。您可以替換此默認行為,只需在調試會話前使用 --start 在目標設備上明確啟動應用即可。
--launch=
此選項類似于 --start,不過它允許您從應用中啟動特定 Activity。僅當您的清單定義多個可啟動 Activity 時,此功能才有用。
--launch-list
這個便捷選項會輸出在您的應用清單中找到的所有可啟動 Activity 名稱的列表。--start 會使用第一個 Activity 名稱。
--project=
此選項可指定應用項目目錄。如果您希望不必先切換到項目目錄就可啟動腳本,則該選項會很有用。
--port=
默認情況下,ndk-gdb 會使用本地 TCP 端口 5039 與它在目標設備上調試的應用進行通信。通過使用其他端口,您可以對在連接至同一主機的不同設備或模擬器上運行的程序進行本地調試。
--adb=
此選項可指定 adb 工具可執行文件。只有在您未指定包含該可執行文件的路徑時才需要使用此選項。
-d
-e
-s
這些標記與具有相同名稱的 adb 命令類似。如果您有多個設備或模擬器連接至主機,請設置這些標記。其含義如下所示:
-d
連接至單個物理設備。
-e
連接至單個模擬器設備。
-s
連接至特定設備或模擬器。其中, 是設備的名稱,與 adb devices 命令列出的相同。
此外,您也可以定義 ADB_SERIAL 環境變量來列出特定的設備,而無需指定特定選項。
--exec=
-x
此選項可指示 ndk-gdb 在連接到要調試的進程后,運行在 中找到的 GDB 初始化命令。如果您要重復執行某些操作(如設置斷點列表,然后繼續自動執行),該功能非常有用。
--nowait
解除 Java 代碼的暫停狀態,直到連上 GDB。傳遞此選項可能會導致調試程序錯過早期的斷點。
--tui
-t
啟用文本界面(如果可用)。
--gnumake-flag=
此選項是在查詢 ndk-build 系統以獲取項目信息時要傳遞到該系統的一個(或多個)額外標志。您可以在同一個命令中使用此選項的多個實例。
注意:此表中的最后三個選項僅適用于 ndk-gdb 的 Python 版本。
線程支持
如果運行應用的平臺版本低于 Android 2.3(API 級別 9),ndk-gdb 就無法正確調試原生線程。調試程序只能調試主線程,abd 會完全忽略其他線程的執行。
如果您在非主線程上執行的函數上放置一個斷點,則程序將退出,而 GDB 將顯示以下消息:
Program terminated with signal SIGTRAP, Trace/breakpoint trap.
The program no longer exists.
總結
以上是生活随笔為你收集整理的android gdb 命令大全,ndk-gdb | Android NDK | Android Developers的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 不孕不育怎么要孩子
- 下一篇: 江陵佳人图是谁画的呢?