日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

android gdb 命令大全,ndk-gdb  |  Android NDK  |  Android Developers

發(fā)布時(shí)間:2023/11/27 生活经验 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android gdb 命令大全,ndk-gdb  |  Android NDK  |  Android Developers 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。