gdb 远程调试android进程
2016-04-25 16:20
337 查看
http://blog.csdn.net/xinfuqizao/article/details/7955346
什么是gdb
它是gnu组织开发的一个强大的unix程序调试工具,我们可以用它来调试Android上的C、C++代码。
它主要可以做4件事情:
随心所欲地启动你的程序。
设置断点,程序执行到断点处会停住。(断点可以是表达式)
程序被停住后,可以查看此时程序中发生的事。
动态改变程序的执行环境。
GDB远程调试原理图
如图上所示,我们需要使用gdbserver依附到我们要调试的进程上,gdb通过adbd和手机上的gdbserver 进行socket通信。
远程调试实战
在手机上启动gdbserver并attach你想调试的进程,并指定监听调试命令的端口(此端口是手机上的端口)
使用adb做端口映射,将pc机上的端口定向到手机上gdbserver监听的端口
启动gdb向指定的pc机端口发信息开始调试
使用gdbclient简化调试流程
进入到源码工程目录下,进行环境配置,执行build文件夹下的envsetup.sh和choosecombo xx xx xx 命令,这时就可以使用gdbclient了。
adb shell进入手机,像之前一样开启gdbserver。
在pc端的源码根目录下,执行 gdbclient -e mediaserver -p 1234 #从1234端口调试mediaserver
什么是gdb
它是gnu组织开发的一个强大的unix程序调试工具,我们可以用它来调试Android上的C、C++代码。
它主要可以做4件事情:
随心所欲地启动你的程序。
设置断点,程序执行到断点处会停住。(断点可以是表达式)
程序被停住后,可以查看此时程序中发生的事。
动态改变程序的执行环境。
GDB远程调试原理图
如图上所示,我们需要使用gdbserver依附到我们要调试的进程上,gdb通过adbd和手机上的gdbserver 进行socket通信。
远程调试实战
在手机上启动gdbserver并attach你想调试的进程,并指定监听调试命令的端口(此端口是手机上的端口)
$ adb shell # ps #查看要调试进程的PID # gdbserver :1234 --attach 96 #:1234是端口号,96 是进程ID
使用adb做端口映射,将pc机上的端口定向到手机上gdbserver监听的端口
$ adb forward tcp:1234 tcp:1234 #端口映射,将pc机的1234端口映射到手机的1234端口
启动gdb向指定的pc机端口发信息开始调试
android_project_root/prebuilt/linux-x86/arm-eabi-4.4.3/$ ./arm-eabi-gdb #使用项目下的gdb客户端去连接gdbserver,gdb的类型要选择针对手机平台的, 版本要和gdbserver一致。
<gdb> target remote :1234 #连接本地的:1234端口,此端口已经和手机的1234端口做好映射。 <gdb> file xxx/out/target/xx...xx/symbols/system/bin/mediaserver #加载可执行程序,注意选择symbols下的,如果调试的进程是app进程, 这里选择app_process。 <gdb> set solib-search-path xxx/out/target/xx...xx/symbols/system/lib #加载所有的动态连接库,注意选择symbols下的。 <gdb> bt #查看调用堆栈 <gdb> list xxx/xxx..xxx/xxx.cpp #查看相关文件 <gdb> b 100 #在文件的第100行打断点 <gdb> c #继续执行程序
使用gdbclient简化调试流程
进入到源码工程目录下,进行环境配置,执行build文件夹下的envsetup.sh和choosecombo xx xx xx 命令,这时就可以使用gdbclient了。
adb shell进入手机,像之前一样开启gdbserver。
在pc端的源码根目录下,执行 gdbclient -e mediaserver -p 1234 #从1234端口调试mediaserver
相关文章推荐
- Android唯一识别号
- 【已解决】Android不能自动生成R.java
- Android studio butterknife简单使用
- Android开发框架
- Android ImageView长按保存图片及截屏相关知识
- android 断点下载---XUtils
- Android 手机上获取物理唯一标识码
- 论android的优化
- 如何获取Android RecyclerView滑动的距离
- Android Studio编译保留指定的so库
- Android loopj 文件上传
- Android:处理调用系统相机照片被压缩问题
- Android SDK和N多Android开发资源
- Android* 操作系统上的应用程序远程调试
- Activity(一)—生命周期及启动模式
- Android学习(44) -- 自定义控件(8) 下拉刷新(添加header)
- 除了布局,android中xml的其他用法
- Android ProgressDialog 有时莫名其妙无法显示的问题
- Android中四大组件
- Android:去掉默认的标题bar