什么是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

android gdbserver相关推荐

  1. Mac OS X下配置Cocos2d-x for Android(Eclipse)IOS(Xcode)开发环境

    前面一段时间只用Cocos2d-x在IOS平台下开发, 学习Cocos2d-x不就是为了他的跨平台特性么? 所以必须也要掌握在Android下的开发, 才能引爆Cocos2d-x的跨平台特性, 发挥其 ...

  2. cocos2dx linux eclipse,苹果Mac OS X下配置Cocos2d-x for Android(Eclipse)和IOS(Xcode)开发环境教程...

    前面一段时间只用Cocos2d-x在IOS平台下开发, 学习Cocos2d-x不就是为了他的跨平台特性么? 所以必须也要掌握在Android下的开发, 才能引爆Cocos2d-x的跨平台特性, 发挥其 ...

  3. cocos2d-x环境配置和常见问题

    参考 http://www.cocos2d-x.org/projects/cocos2d-x/wiki/How_to_build_and_run_HelloWorld 脚本生成工程 http://ww ...

  4. java 调试 gdb_android gdb 调试实例演示(有源代码篇)

    android ndk代码的调试本身还是有点麻烦的,因为本身google android的sdk 主要是面向广大的java程序员的,所以后来发布的 ADT 集成开发环境对java的代码调试 支持还是很 ...

  5. 使用和了解Valgrind核心:高级主题

    目录 3.1.客户端请求机制3.2.使用Valgrind gdbserver和GDB调试程序 3.2.1.快速入门:3步调试3.2.2.Valgrind gdbserver整体组织3.2.3.将GDB ...

  6. valgrnd调试详解

    目录 3.1.客户端请求机制3.2.使用Valgrind gdbserver和GDB调试程序 3.2.1.快速入门:3步调试3.2.2.Valgrind gdbserver整体组织3.2.3.将GDB ...

  7. Android之gdbserver/gdb调试

    1.查看cameraserver的pid # adb shell ps |grep cameraserver cameraserver 237 1 144332 94532 ptrace_sto 00 ...

  8. Ubuntu和Mac使用gdbserver远程调试android源码

    一.gdbserver在android上远程调试进程 0.关闭Enforcing # adb shell setenforce 01.拷贝gdb和gdbserver文件 <1>PC端为Cl ...

  9. 【Win7下Android native code的编译和调试】

    光为这编译及调试环境就前后折腾了两三天,墙外找了很多教程,bill以为以下教程最为贴切 Using eclipse for android - cc Development Using eclipse ...

  10. android系统的测试方法,运行测试  |  Android 开源项目  |  Android Open Source Project...

    本页将介绍如何在 Linux 和 Windows 环境中运行 deqp 测试.如何使用命令行参数,以及如何使用 Android 应用包. Linux 与 Windows 环境 首先,请将以下文件及目录 ...

最新文章

  1. 《DDIA》读书笔记
  2. mysql日志文件相关的配置【2】
  3. Nginx 高可用集群解决方案 Nginx + Keepalived
  4. padans的DataFrame
  5. endnote咋手动输入文献_EndNote 如何在 Word 中手动输入引文
  6. python字符串中find函数_Python之字符串常用花哨玩法
  7. 数组指针和指针数组,函数指针和指针函数,常量指针和指针常量,常量引用
  8. 借助Fiddle使用不同版本的UI5库文件进行测试
  9. 《Matlab实用案例》系列Matlab从入门到精通实用100例案例教程目录(持续更新)
  10. ASP.NET页面解析(3)
  11. apache性能优化
  12. Android View 绘制流程
  13. 浅谈 MVC3 WebMail 发送邮件
  14. 倾斜摄影模型(.osgb)中心点位置的确定方法(SuperMap idesktop)
  15. Web框架-SSM框架
  16. mmdetection自定义模型
  17. NNT 抢任务 神器 V1.0.5
  18. 计算机控制人脑的电影,推荐20部全球经典烧脑电影,考验你智商的时刻到了(上)...
  19. MSP430F149程序——RS485
  20. 如何理解论文中常见的Top-1错误率和Top-5错误率?

热门文章

  1. Mercurial使用简单介绍zz
  2. 【转】SQL SERVER convert函数日期格式化应用
  3. python绘制3d动态模型_给大家介绍一个python三维动画制作库,数学作图,数据可视化建模...
  4. BZOJ 5261 Rhyme
  5. Jmeter之简单控制器
  6. 洛谷——P1744 采购特价商品
  7. js jquery select 操作 获取值,选中选项,增加,修改,删除
  8. 深入理解javascript中的立即执行函数(function(){…})() 1
  9. openwrt: Makefile 框架分析[转载]
  10. JS、PHP输出语句。