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

什么是gdb

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

更多相关文章

  1. cm-14.1 Android系统启动过程分析(四)-Launcher 启动过程
  2. Android(安卓)进程间通信之binder - 实战
  3. Android(安卓)开发调试工具的使用总结
  4. Android多进程使用及其带来的问题
  5. Android手机访问Django测试服务器方法
  6. Android之AIDL进程之间的通信
  7. Android(安卓)启动过程分析 (一)
  8. Mono for Android试用体验
  9. Android安全模型之Android安全机制(进程通信)

随机推荐

  1. ESXI(VSphere)主机补丁离线升级(多图)
  2. 对接海康AI Cloud智能应用平台
  3. kubesphere中Metrics Server故障排查
  4. 文件内容差异对比
  5. Graylog 日志系统
  6. 标题test123
  7. Vscode的下载安装和必备插件的使用与Mark
  8. 程序员找不到女朋友?利用 Python 爬虫帮你
  9. 中秋是你超越别人最好的机会,附Java 学习
  10. 数据库悲观锁 for update 的使用场景之一