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