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/gdb2.编译native程序
添加编译选项-g 去掉编译选项stripLOCAL_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/tmp4.在设备上部署你的Native程序
把你编译出的程序和相关so库部署到设备上,注意,如果有自定义so库,so库要放在/system/lib下,/system路径默认是只读的,可以通过adb remount来重置。adb push ./hello /data/local/tmpadb push ./libmylib.so /system/lib5.把设备上的相关调试环境拷贝到本地
因为远程调试需要一些目标机的库,把如下文件拷贝到本地文件夹adb pull /system/lib ./debugging/libadb pull /system/bin/linker ./debugging/lib6.在设备上通过gdbserver运行你的程序
adb shell gdbserver IP:12345 /data/hello7
4000
.在本地把本地TCP端口forward到设备的TCP端口
adb forward tcp:12345 tcp:123458.在本地运行Android ndk路径下的gdb程序
注意,这里的gdb-test的位置非常重要,因为你可以看到在libs与obj都有hello,为了保证符号表能成功进行加载,这里必须使用在obj下的hello,因为libs中生成的始终是去掉符号表的,只有objs中的才是真正可调试的。
9.启动gdb后在gdb下设置solib搜索路径
就是让gdb运行时能够找到调试相关的那些lib,也就是那些第三步中从设备上拉下来的文件。(gdb) set solib-search-path ./debugging/lib10.在gdb下设置你希望调试的Native程序
(gdb) file ./demo11.连接到设备的gdbserver
(gdb) target remote IP:1234512.开始调试
通过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
相关文章推荐
- Ubuntu和Mac使用gdbserver远程调试android源码
- 在ubuntu10.04成功移植gdbserver及gdbserver使用介绍(用于CCSV5.2远程调试ARM CORTEX-A8程序)
- 在ubuntu10.04成功移植gdbserver及gdbserver使用介绍(用于CCSV5.2远程调试ARM CORTEX-A8程序)
- gdb 远程调试 android native 程序
- Android使用gdb调试native程序
- 使用ndk-gdb调试android native程序
- Android gdbserver远程调试native程序方法
- 用GDB远程调试android native程序
- 用GDB远程调试android native程序
- android中使用gdbserver调试c程序
- Android Native C程序使用GDBServer调试
- 使用GDB调试Android NDK native(C/C++)程序
- 使用GDB调试Android NDK native(C/C++)程序
- 使用GDB调试Android NDK native(C/C++)程序
- 使用GDB调试Android NDK native(C/C++)程序
- 如何使用arm-eabi-gdb调试android c/c++程序
- 用android自带的gdb与gdbserver调试native C/C++程序
- Android 系统中使用GDB调试C程序
- ubuntu下使用魅族mx真机调试android程序
- 使用gdb和gdbserver调试Android C/C++程序