用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启动后,指定本地的端口,加载代码,然后就可以调试了
上次写了几个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启动后,指定本地的端口,加载代码,然后就可以调试了
相关文章推荐
- Java、Android多线程、线程池
- android在线边缓存边播放mp4
- android热修复--适合做sdk的项目
- android图片处理方法(待整理)
- Android界面编辑经验之谈
- android中textview中文字显示过长、使其用省略号代替,点击显示全部
- Android Support Design 之 CoordinatorLayout
- android开发之GestureDetector手势识别(调节音量、亮度、快进和后退)
- Android下打印调试堆栈方法
- Android-->EventBus 3.0新版使用说明(及其使用方法)
- Android点击空白区域,隐藏输入法软键盘
- Android5.0通知变化浅析
- 浅析Android手机卫士之号码归属地查询
- 百度定位案例。(无地图版本)
- android 权限录音权限检测
- android 如何打包自定义控件
- Android中TextView的那些事
- Android ORM框架 greenDAO 使用方法
- fragment使用琐记
- mac 安装 Android Studio