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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ndk学习6: 使用gdb调试ndk程序一

發布時間:2023/12/10 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ndk学习6: 使用gdb调试ndk程序一 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


生成debug版程序

方法一:

使用ndk-build編譯時,加上如下參數NDK_DEBUG=1,之后生成so文件之外,還會生成gdbobserver,gdb.setup調式文件

?

方法二:

修改AndroidManifest.xml文件,增加debuggable屬性為true

? ??<application?android:debuggable="true"? ...

Eclipse報錯則在錯誤信息上點右鍵 Quickly fix 忽略掉錯誤即可

?

編譯之后會生成和調試相關的文件如下:

?

libs目錄下的gdbserver需要拷貝到虛擬機

gdb.setup是設置和符號相關的路徑

obj下面的Hello是符號相關的路徑

?

方法三:

在application.mk中加入

APP_OPTIM?:=?debug

NDK_DEBUG?=?1??

只會生成調試的符號文件,對應版本的gdbsever還需要自己從ndk中拿出來

?

啟動調試

我們以x86的模擬器作為調試目標,首先編譯x86版本的可執行文件

在工程目錄下新建一個makefile文件

編寫調試腳本如下:

MODALE_NAME := Hello

? ?

# x86 path

X86_TOOLS_PATH :=E:\Android\android-ndk-r10b\toolchains\x86-4.6\prebuilt\windows-x86_64\bin

X86_GDB_PATH := $(X86_TOOLS_PATH)\i686-linux-android-gdb.exe

X86_GDB_SERVER := E:\Android\android-ndk-r10b\prebuilt\android-x86\gdbserver\gdbserver

? ?

run_x86:

????adb push .\libs\x86\$(MODALE_NAME) /data/local/tmp

????adb shell chmod 755 /data/local/tmp/$(MODALE_NAME)

????adb shell /data/local/tmp/$(MODALE_NAME)

? ?

debug_x86:

????adb forward tcp:12345 tcp:12345

????adb push $(X86_GDB_SERVER) /data/local/tmp

????adb shell chmod 777 /data/local/tmp/gdbserver

????adb push .\obj\local\x86\$(MODALE_NAME) /data/local/tmp

????adb shell chmod 777 /data/local/tmp/$(MODALE_NAME)

????adb shell /data/local/tmp/gdbserver :12345 /data/local/tmp/$(MODALE_NAME)

? ?

client_x86:

????$(X86_GDB_PATH) .\obj\local\x86\$(MODALE_NAME)

# 1. target remote localhost:12345

# 2. gdb.setup

?

?

debug子過程:

大致的流程就是把gdbserver和debug版本程序拷貝到手機或者模擬器里面

給予可執行權限,然后用手機里面的gdbserver啟動程序 等待PC上的gdb連接

?

?

client子過程:

就是連接手機中的gdb開始調試

?

?

然后執行make debug 服務端即開始等待客戶端調試器的連接

出現Listen就對了

?

?

在換一個shell 輸入make client?

進入gdb界面后輸入target remote localhost:12345

報錯:找不到動態鏈接庫,這是沒有設置gdb.setup的原因

?

?

解決方案:

libs/x86目錄下的gdb.setup中的2行命令放到gdb(client)中執行就好

?

?

如下圖設置就好:

?

然后就可以開始調試了

?

注意:

1.如果模擬器是基于x86架構的 那么gdbserver也必須使用x86?

2.如果你的工程的ABIarmeabi-v7a, 那么libs目錄下的gdbserver也是armeabi-v7a

?

?

GDB簡易使用

gdb命令比較多,簡單的介紹幾個常用的命令:

list(l) 用來查看代碼

break line_num(b) ?用于對指定的代碼行下斷點

info breakpoint 用于查看斷點信息

run命令用于執行程序

next (n) 單步步過

step (s) 單步步入

continue (c) 執行到下一個斷點

print 查看變量的值

backtrace 函數棧信息

clear 刪除暫停處的斷點

delete 刪除一個斷點

info func 顯示函數信息

info local 顯示當前函數的局部變量信息

q命令退出調試

?

?

?

轉載于:https://www.cnblogs.com/bingghost/p/5731020.html

總結

以上是生活随笔為你收集整理的ndk学习6: 使用gdb调试ndk程序一的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。