您的位置:首页 > 移动开发 > Android开发

Ubuntu下使用gdb远程调试android native程序笔记

2018-03-21 13:34 866 查看

使用gdb远程调试android native程序

1.准备工作:

android native程序:demoandroid 上运行的调试工具:gdbserver,该程序位于ndk目录/prebuilt/android-arm/gdbserver/gdbserverpc上的调试工具:gdb,该程序位于ndk目录/prebuilt/linux-x86_64/bin/gdb

2.编译native程序

添加编译选项-g 去掉编译选项strip
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_CFLAGS += -g -O3 -fvisibility=hidden LOCAL_MODULE := hello LOCAL_SRC_FILES := main.c \        kernelMsgParser.c \        socketserver.c\        utils.c \        recvkernel.c #cmd-strip = $(TOOLCHAIN_PREFIX)strip $1 LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -lz -llog #include $(BUILD_SHARED_LIBRARY) include $(BUILD_EXECUTABLE)

3.在设备上部署gdbserver

将android ndk下的gdbserver拷贝到设备上,可以通过如下命令adb push gdbserver /data/local/tmp

4.在设备上部署你的Native程序

把你编译出的程序和相关so库部署到设备上,注意,如果有自定义so库,so库要放在/system/lib下,/system路径默认是只读的,可以通过adb remount来重置。adb push ./hello /data/local/tmpadb push ./libmylib.so /system/lib

5.把设备上的相关调试环境拷贝到本地

因为远程调试需要一些目标机的库,把如下文件拷贝到本地文件夹adb pull /system/lib ./debugging/libadb pull /system/bin/linker ./debugging/lib

6.在设备上通过gdbserver运行你的程序

adb shell gdbserver IP:12345 /data/hello

7
4000
.在本地把本地TCP端口forward到设备的TCP端口

adb forward tcp:12345 tcp:12345

8.在本地运行Android ndk路径下的gdb程序

注意,这里的gdb-test的位置非常重要,因为你可以看到在libs与obj都有hello,为了保证符号表
能成功进行加载,这里必须使用在obj下的hello,因为libs中生成的始终是去掉符号表的,只有objs中的才是真正可调试的。

9.启动gdb后在gdb下设置solib搜索路径

就是让gdb运行时能够找到调试相关的那些lib,也就是那些第三步中从设备上拉下来的文件。(gdb) set solib-search-path ./debugging/lib

10.在gdb下设置你希望调试的Native程序

(gdb) file ./demo

11.连接到设备的gdbserver

(gdb) target remote IP:12345

12.开始调试

通过continue或c运行程序。注意不是用run,因为程序在目标机上其实已经启动了,只是break在程序入口。设置几个断点,然后单步执行【3】。常用断点设置方法如下:break 函数名break 行号break 文件名:行号break 文件名:函数名break +偏移量break -偏移量break  *地址info b断点信息注:出现readchar:Got EOF错误,说明gdbserver与arm-xx-gdb版本不匹配,尝试不同版本的gdbserver即可。

13.最后效果如图:

Android端:

PC端:

参考

【1】http://blog.csdn.net/luckywang1103/article/details/51859642
【2】http://blog.csdn.net/breezedong/article/details/25414535
【3】http://blog.csdn.net/haoel/article/month/2003/07
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: