gdb 远程调试android进程
原文:http://blog.csdn.net/xinfuqizao/article/details/7955346?utm_source=tuicool
什么是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
gdb 远程调试android进程的更多相关文章
- gdb 远程调试android进程 -转
什么是gdb 它是gnu组织开发的一个强大的unix程序调试工具,我们可以用它来调试Android上的C.C++代码. 它主要可以做4件事情: 随心所欲地启动你的程序. 设置断点,程序执行到断点处会停 ...
- gdb 远程调试 android native 程序
ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 先看一张原理图: 我是 Linux 和 Android 双料 0 基础,目前对 gdb 了解的很浅显.(注意 ...
- 用GDB远程调试android native程序
上次写了几个native程序,想着如何调试,经过一阵子搜索和测试,终于完成了.有几个关键点: 1 gdb和gdbserver 因为这两个需要配套,建议使用同一个ndk下面的gdb和gdbserver ...
- GDB + gdbserver 远程调试android native code
原文地址:GDB + gdbserver 远程调试android native code 作者:tq08g2z 以调试模拟器中的native library code为例. Host: ubuntuT ...
- Gdb远程调试Linux内核遇到的Bug
知识共享许可协议本作品采用知识共享署名 4.0 国际许可协议进行许可.转载保留声明头部与原文链接https://luzeshu.com/blog/gdb-bug 本博客同步在http://www.cn ...
- 如何通过Chrome远程调试android设备上的Web网站
网上的帖子很多,但很多都是老版本的,试过了,根本不管用,花了一天时间,终于在本机试验通过了,特记录下来,以备用.有需要的朋友也可以参考.先上一张图,看看PC端chrome上调试的效果: 左边是手机的模 ...
- 远程调试 Android 设备使用入门(谷歌翻译版)
移动前端调试方案(Android + Chrome 实现远程调试) 目录 要求 第 1 步:发现您的 Android 设备 第 2 步:从您的开发计算机调试 Android 设备上的内容. 更多操作: ...
- GDB + gdbserver 远程调试mediaserver进程
远程调试步骤 在Android设备上启动gdbserver并attach你想调试的进程,并指定监听调试命令的端口(此端口是TV上的端口) $ adb shell # ps |grep media # ...
- ida GDB 远程调试
在看雪上回答的问题,有人问在WinDbg下断KiDebugRoutine或者KdEnterDebugger函数会引发蓝屏!因为是在调试Windows的内核调试引擎,我给出的解决办法是用不依赖Windo ...
随机推荐
- Gym - 101291C (很有意思的最短路)
题意: 给出一张地图和机器人还有出口的位置,地图上面有障碍.然后给出UDLR上下左右四种指令,遇到障碍物或者越界的指令会忽略,剩下的继续执行. 只要到达出口就算找到出口,然后给你一串指令,让你修改指令 ...
- layui 数据table隐藏表头
$('.layui-table .layui-table-cell > span').css({'font-weight': 'bold'});//表头字体样式 /*$('th').css({' ...
- crop层
A是要进行剪裁的blob,B是参考,C是由A剪裁出来的输出. 模式1和模式2不同在于offset,模式1中每个dimension可以不同,模式2中用一个值表示了所有dimension的值. axis表 ...
- 利用python进行数据分析1_numpy的基本操作,建模基础
import numpy as np # 生成指定维度的随机多维数据 data=np.random.rand(2,3) print(data) print(type(data)) 结果: [[0.11 ...
- win7上安装虚拟机并上网
一.安装Workstation Pro 二.下载CentOS-7-x86_64-DVD-1511.iso包 三.创建新的虚拟机,按照向导安装即可 四.使用cd /etc/sysconfig/netwo ...
- shell脚本,逻辑结构题练习。
awk '/5/{a=1}!a' file2结果:1234解释:第一行 /5/不匹配跳过{a=1},继续!a,此时a没有值属于假取反为真,故输出第一行 第二行 /5/不匹配跳过{a=1},继续!a,此 ...
- std::ios::sync_with_stdio和tie()——给cin加速
平时在Leetcode上刷题的时候,总能看到有一些题中最快的代码都有这样一段 static const auto init = []() { std::ios::sync_with_stdio(fal ...
- 【NOIP2017提高A组冲刺11.6】拆网线
和syq大兄弟吐槽题目不小心yy出了正解.. 最优的选法就是选两个两个相互独立的,欸这不就是最大匹配吗?那多的企鹅就新加一条边呗?不够的就除以2上取整呗? 欸?AC了? 树也是一个二分图,最大匹配=最 ...
- Linux内核——进程管理之CFS调度器(基于版本4.x)
<奔跑吧linux内核>3.2笔记,不足之处还望大家批评指正 建议阅读博文https://www.cnblogs.com/openix/p/3262217.html理解linux cfs调 ...
- Web框架之Django_10 重要组件(Auth模块)
一.auth模块介绍 Auth模块是Django自带的用户认证模块: 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等 ...