使用android的模拟器可以调试应用,也可以调试C/C++代码库。

调试C/C++代码时,还可以使用GDB单步调试代码,跟linux上一样方便。

1. 准备android代码:从官网上下载代码,编译整个系统,最好选X86的选项

$source buid/envsetup.sh

$lunch

Lunch menu... pick a combo:
     1. aosp_arm-eng
     2. aosp_arm64-eng
     3. aosp_mips-eng
     4. aosp_mips64-eng
     5. aosp_x86-eng
     6. aosp_x86_64-eng
     7. aosp_shamu-userdebug
     8. aosp_hammerhead-userdebug
     9. aosp_mako-userdebug
     10. aosp_flounder-userdebug
     11. aosp_manta-userdebug
     12. aosp_grouper-userdebug
     13. aosp_tilapia-userdebug
     14. aosp_deb-userdebug
     15. aosp_flo-userdebug
     16. full_fugu-userdebug
     17. aosp_fugu-userdebug
     18. m_e_arm-userdebug
     19. mini_emulator_x86-userdebug
     20. mini_emulator_arm64-userdebug
     21. mini_emulator_mips-userdebug
     22. mini_emulator_x86_64-userdebug

不同的系统,选项次序可能不同。在PC机上用模拟器调试最好直接选用x86的编译选项

2. 编译得到的系统便可以启动模拟器运行,如果要启用GPU加快渲染速度,使用: emulator -gpu on

以调试httplive为例,说明如何调试C/C++代码

1. 由于httplive属于android多媒体服务,因此,可以查看media的线程号来调试

$adb shell ps

system    937   1     10204  848   813e089c b2eda017 S /system/bin/servicemanager
root      938   1     16184  2608  ffffffff 9c993ab7 S /system/bin/vold
system    939   1     37664  4168  ffffffff d13ee93a S /system/bin/surfaceflinger
root      941   1     9924   760   8110c261 acaa993a S /system/bin/qemud
shell     944   1     10156  1104  81237267 5621c9f7 S /system/bin/sh
root      945   1     13244  524   ffffffff 0042472a D /sbin/adbd
root      946   1     12012  1604  8103d5cc 67b16a7a D /system/bin/netd
root      947   1     10884  1060  813f581c f7684003 S /system/bin/debuggerd
root      948   1     11084  1224  813f581c eac4cc7a S /system/bin/debuggerd64
radio     949   1     15736  1864  ffffffff b9313ab7 S /system/bin/rild
drm       950   1     24192  4492  ffffffff f761fe66 S /system/bin/drmserver
media     951   1     30272  6608  8109bebb f776dbd9 D /system/bin/mediaserver
install   952   1     10216  876   813f581c e9026c7a S /system/bin/installd
keystore  953   1     14616  2728  813e089c 2738d017 S /system/bin/keystore
root      954   1     382728 27000 ffffffff 2461825d D zygote64
root      955   1     358568 21804 ffffffff f3a03246 D zygote
root      963   2     0      0     8106d1a8 00000000 S kauditd
graphics  983   1     34252  7780  ffffffff 6e130017 S /system/bin/bootanimation
root      1242  945   12264  1476  00000000 6cbf59f7 R ps
root      1244  946   12012  464   00000000 67ab91a8 R /system/bin/netd

$gdbclient 951

在某一行打断点:b xxx.cpp:35

接着继续运行: c

2. 启动应用上的播放器,可以看到gdb已经可以运行了,这个时候的调试就跟linux上的gdb完全一样了

3. 由于android上的gdb 调试属于远程调试,因此,无法像linux上一样继续重新运行:run

需要退出当前的gdb,重新进入,这个时候就需要把media进程杀掉,重新看一下media属于那个线程号,重复步骤1

尽管gdb的调试比linux上要麻烦点,但是能够单步调试,对于开发者来说已经很方便了。

使用GDB调试android模拟器相关推荐

  1. Eclipse+CDT+GDB调试android NDK程序

    http://www.cnblogs.com/shadox/archive/2011/12/02/2272564.html Eclipse+CDT+GDB调试android NDK程序 Eclipse ...

  2. 使用 GDB 调试 Android 应用

    GNU 工程调试器(GDB)是一个常用的 Unix 调试器.本文详述使用 gdb 调试 Android 应用和进程的方法. 调试运行中的应用或进程 gdbclient 是源码库中的一个 shell 脚 ...

  3. Ubuntu下正确姿势使用GDB调试Android Native进程

        Ubuntu下正确姿势使用GDB调试Android Native进程 前言   对于Android Native进程大家是既爱又恨啊,爱的是它能为我们的Android世界带来别样的精彩,狠的是 ...

  4. 使用gdb调试Android(aarch 64)可执行二进制文件

    Android官方提供了调试ndk进行 使用场景 在pc端编写Android可执行程序(注意不是App进程程序,这里指的是一个可执行文件比如linux的ELF文件.windows exe文件) 现在市 ...

  5. android 模拟器so调试,[求助]IDA 7.0 调试Android模拟器 so文件的问题

    taotao_su 但是设断点不能断,也不能单步执行,出各种奇怪的signals可能是什麽原因呢? 另外虽然模拟器x86, 但是app是arm的,有关系吗? 我在雷電模調試一個flutter app遇 ...

  6. gdb调试android

    手机端 adb shell gdbserver  --mulit *:23333 /data/local/tmp/test 电脑 target  remote 192.168.1.170:23333 ...

  7. Android 模拟器下载、编译及调试

    Android 模拟器源码下载 Android 模拟器源码的下载与 Android AOSP 源码库的下载过程类似,可以参考 Google 官方提供的 Android 源码下载文档 来了解这个过程. ...

  8. android程序启动之后 eclipse ndk-gdb 连接,Eclipse+CDT+GDB调试android-NDK程序(补足六个汉字).docx...

    Eclipse+CDT+GDB调试android NDK程序 Eclipse+CDT+gdb调试android ndk程序 先介绍一下开发环境,在这个环境下,up主保证是没有问题的. ubuntu 1 ...

  9. android+模拟器上gdb,使用gdb在Android Emulator中进行调试c程序

    1.下载Android Debugging Utilities 2.启动Android Emulator模拟器 $ emulator @1.5_R2 3.把gdb和调试文件以及源代码放到模拟器上 $ ...

最新文章

  1. mysql扩展中如何处理结果集_我们如何处理MySQL存储过程中的结果集?
  2. Python内置函数(57)——setattr
  3. C# async await 学习笔记1
  4. java thread join()_Java Thread join() 的用法
  5. Zend Studio 10.6正式版注册破解地址
  6. linux 自动清理var log,Linux 系统 /var/log/journal/ 垃圾日志清理-Fun言
  7. less加管道tail_Linux-10 (CentOS)cat/more/less/ / 及echo/head /tail/的用法区别
  8. iOS在应用中添加自定义字体
  9. 超赞,1万字的后端面试题及面试经验分享!
  10. Solved: RDP Disconnected – Error Code 2825 mremote
  11. 腾讯信鸽推送php,腾讯信鸽推送业务封装类-PHP版
  12. wind python接口手册_wind量化平台-用户手册(python).pdf
  13. 黑群晖文件服务器,折腾NAS,入手黑群晖
  14. 计算机二进制乘法运算(原码,补码)
  15. IP属地靠谱吗?或是一把双刃剑
  16. 公司职员薪水管理系统(List)
  17. python拦截游戏封包_【求助】关于pygame封包问题
  18. 微信小程序请求wx.request报400(Bad Request)解决
  19. linux 的常用命令---------第十三阶段(NFS与DHCP服务,scp用法)
  20. CRC16校验使用体验

热门文章

  1. MVC 洋酒销售系统的设计与实现java jsp 程序设计 课程设计 毕业设计-附源码02135
  2. 怎么查mysql数据库版本信息查询_mysql 查询版本(mysql查询数据库版本信息)
  3. 三星a52设置杜比全景声教程
  4. ROS+Bebop2无人机+YOLO算法实现无人机视角的实时目标检测
  5. SqlcommandBuilder Sqlcommand sqldataAdapter DataSet DataTable
  6. centos卸载harbor_在Linux主机使用命令行批量删除harbor镜像
  7. CPU和GPU前端的应用
  8. java基于ssm+vue的学院办公用品管理信息系统
  9. 游戏脚本多线程与中控台完整详解
  10. Python百度文库爬虫之txt文件