什么是gdb

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

GDB远程调试原理图

如图上所示,我们需要使用gdbserver依附到我们要调试的进程上,gdb通过adbd和手机上的gdbserver 进行socket通信。

远程调试实战

  • 在手机上启动gdbserver并attach你想调试的进程,并指定监听调试命令的端口(此端口是手机上的端口)
  1. $ adb shell
  2. # ps #查看要调试进程的PID
  3. # gdbserver :1234 --attach 96 #:1234是端口号,96 是进程ID
  • 使用adb做端口映射,将pc机上的端口定向到手机上gdbserver监听的端口
  1. $ adb forward tcp:1234 tcp:1234 #端口映射,将pc机的1234端口映射到手机的1234端口
  • 启动gdb向指定的pc机端口发信息开始调试
  1. android_project_root/prebuilt/linux-x86/arm-eabi-4.4.3/$ ./arm-eabi-gdb #使用项目下的gdb客户端去连接gdbserver,gdb的类型要选择针对手机平台的,
  2. 版本要和gdbserver一致。
  1. <gdb> target remote :1234 #连接本地的:1234端口,此端口已经和手机的1234端口做好映射。
  2. <gdb> file xxx/out/target/xx...xx/symbols/system/bin/mediaserver #加载可执行程序,注意选择symbols下的,如果调试的进程是app进程,
  3. 这里选择app_process。
  4. <gdb> set solib-search-path xxx/out/target/xx...xx/symbols/system/lib #加载所有的动态连接库,注意选择symbols下的。
  5. <gdb> bt #查看调用堆栈
  6. <gdb> list xxx/xxx..xxx/xxx.cpp #查看相关文件
  7. <gdb> b 100 #在文件的第100行打断点
  8. <gdb> c #继续执行程序

使用gdbclient简化调试流程

  • 进入到源码工程目录下,进行环境配置,执行build文件夹下的envsetup.sh和choosecombo xx xx xx 命令,这时就可以使用gdbclient了。
  • adb shell进入手机,像之前一样开启gdbserver。
  • 在pc端的源码根目录下,执行 gdbclient -e mediaserver -p 1234 #从1234端口调试mediaserver

gdb 远程调试android进程 -转的更多相关文章

  1. gdb 远程调试android进程

    原文:http://blog.csdn.net/xinfuqizao/article/details/7955346?utm_source=tuicool 什么是gdb 它是gnu组织开发的一个强大的 ...

  2. gdb 远程调试 android native 程序

    ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 先看一张原理图: 我是 Linux 和 Android 双料 0 基础,目前对 gdb 了解的很浅显.(注意 ...

  3. 用GDB远程调试android native程序

    上次写了几个native程序,想着如何调试,经过一阵子搜索和测试,终于完成了.有几个关键点: 1 gdb和gdbserver 因为这两个需要配套,建议使用同一个ndk下面的gdb和gdbserver ...

  4. GDB + gdbserver 远程调试android native code

    原文地址:GDB + gdbserver 远程调试android native code 作者:tq08g2z 以调试模拟器中的native library code为例. Host: ubuntuT ...

  5. Gdb远程调试Linux内核遇到的Bug

    知识共享许可协议本作品采用知识共享署名 4.0 国际许可协议进行许可.转载保留声明头部与原文链接https://luzeshu.com/blog/gdb-bug 本博客同步在http://www.cn ...

  6. 如何通过Chrome远程调试android设备上的Web网站

    网上的帖子很多,但很多都是老版本的,试过了,根本不管用,花了一天时间,终于在本机试验通过了,特记录下来,以备用.有需要的朋友也可以参考.先上一张图,看看PC端chrome上调试的效果: 左边是手机的模 ...

  7. 远程调试 Android 设备使用入门(谷歌翻译版)

    移动前端调试方案(Android + Chrome 实现远程调试) 目录 要求 第 1 步:发现您的 Android 设备 第 2 步:从您的开发计算机调试 Android 设备上的内容. 更多操作: ...

  8. GDB + gdbserver 远程调试mediaserver进程

    远程调试步骤 在Android设备上启动gdbserver并attach你想调试的进程,并指定监听调试命令的端口(此端口是TV上的端口) $ adb shell # ps |grep media  # ...

  9. ida GDB 远程调试

    在看雪上回答的问题,有人问在WinDbg下断KiDebugRoutine或者KdEnterDebugger函数会引发蓝屏!因为是在调试Windows的内核调试引擎,我给出的解决办法是用不依赖Windo ...

随机推荐

  1. Android Studio 项目结构

    在Android Studio中创建项目后,会出现 activity_main.xml 和 MainActivity.java 两个文件 其中  Java文件定义了一个Activity,当应用运行时, ...

  2. JavaScript高级程序设计:第二章

    在HTML中使用JavaScript 1.<script>元素:向HTML页面中插入JavaScript的主要方法就是使用<scritp>元素.HTML4.01为<scr ...

  3. java代码中 路径符号的写法

    String path="D:\\新建文件夹\\2.png"; File file=new File(path); System.out.println(file.exists() ...

  4. url操作一网打尽(一)

    1:url实际应用简介 近期研究发现通过url传递参数很普遍的(淘宝也是这样做的), 通过修改url来传递参数,比如通过关键字搜索某件商品的时候,链接便追加了相应参数.在请求接口的时候直接对url进行 ...

  5. 注解 @ 或者 Alt+/ 不提示 或者提示 no default propsals 解决方案

  6. 1305: Substring

    #include <iostream>#include<string.h>#include<stdio.h> using namespace std; #defin ...

  7. 第7章 一个java源文件中只能有一个public类

    一个Java源文件中最多只能有一个public类, 1)当有一个public类时,源文件名必须与之一致,否则无法编译, 2)如果源文件中没有一个public类,则文件名与类中没有一致性要求. 至于ma ...

  8. Ubuntu 下安装 nfs

    1先安装sudo apt-get install nfs-kernel-server(安装nfs-kernel-server时,apt会自动安装nfs-common和portmap) 分开看就是1.服 ...

  9. 关于C++中虚函数表存放位置的思考

    其实这是我前一段时间思考过的一个问题,是在看<深入探索C++对象模型>这本书的时候我产生的一个疑问,最近在网上又看到类似的帖子,贴出来看看: 我看到了很多有意思的答案,都回答的比较好,下面 ...

  10. AJAX程序实验

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 < ...