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

用GDB远程调试android native程序

2016-04-22 11:14 525 查看
http://blog.163.com/tod_zhang/blog/static/102552214201392824228231/

上次写了几个native程序,想着如何调试,经过一阵子搜索和测试,终于完成了。有几个关键点:

1 gdb和gdbserver

因为这两个需要配套,建议使用同一个ndk下面的gdb和gdbserver

gdbserver的是在 android-ndk-r9\prebuilt\android-arm\gdbserver 这个目录下

gdb 是在 android-ndk-r9\toolchains\arm-linux-androideabi-4.8\prebuilt\windows-x86_64\bin 目录下,名称是arm-linux-androideabi-gdb.exe

2 然后把gdbserver安装到设备的 /system/bin下

adb push gdbserver /system/bin/

adb shell chmod u+x /system/bin/gdbserver

3 以DEBUG方式编译程序

具体来说,就是 ndk-build NDK_DEBUG=1

可以调试的程序在 ..\obj\local\armeabi目录下,相对于jni目录

4 启动程序

adb push hello /data/local/tmp/

adb shell chmod u+x /data/local/tmp/hello

gdbserver :8123 /data/local/tmp/hello

5 启动GDB开始调试

adb forward tcp:1234 tcp:8123

设置adb的转发

arm-linux-androideabi-gdb

(gdb) file ../obj/local/armeabi/sum

加载调试程序

(gdb) target remote :1234

说明远程调试对象

(gdb)list

显示代码

(gdb) break main

设置断点

(gdb) cont

继续运行

6 总结

因为gdb本来就支持远程调试,在启动gdbserver的时候,指定本地调试端口,但是由于设备是通过adb来连接的,所以指定adb来做转接,在设备启动调试后,就等待gdb来连接调试,所以gdb启动后,指定本地的端口,加载代码,然后就可以调试了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: