原文:http://blog.csdn.net/xinfuqizao/article/details/7955346?utm_source=tuicool

什么是gdb

它是gnu组织开发的一个强大的unix程序调试工具,我们可以用它来调试Android上的C、C++代码。
它主要可以做4件事情:
  1. 随心所欲地启动你的程序。
  2. 设置断点,程序执行到断点处会停住。(断点可以是表达式)
  3. 程序被停住后,可以查看此时程序中发生的事。
  4. 动态改变程序的执行环境。

GDB远程调试原理图

gdb 远程调试android进程
如图上所示,我们需要使用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

更多相关文章

  1. 关于android的屏幕常亮和完全关闭程序
  2. 20172323 2017-2018-2《程序设计与数据结构》第十一周学习总结
  3. Android 在init.rc启动一个c++程序
  4. 程序的组件模式
  5. Android之AIDL进程之间的通信

随机推荐

  1. Android事件分发机制完全解析,带你从源码
  2. android每日一问2【2011-8-28】
  3. Android多媒体学习三:实现自己的Camera
  4. 【Android(安卓)开发】:数据存储之File文
  5. Android之3D动画效果
  6. android操作sdcard中的多媒体文件(一)——
  7. AIDL-- Android中的远程接口
  8. Android(安卓)JUnit 入门指南
  9. APK ubuntu下 数字签名
  10. 理解android上的安全性【转】