1:弄一个和平台相关的程序放入手机

#adb push memtest  /data/bin

2:启动gdbserver

我们编译出来的系统都已经自带了gdbserver,如果没有,例如真机,可以在prebuilt里面找到编译好的安装上去这里我们直接在adbshell中启动gdbserver$adb shell#gdbserver :1234 /data/bin/memtest正常的话应该显示:Process/data/bin/memtest created; pid = 571Listeningon port 1234

3:启动arm-eabi-gdb进行调试

然后在另一个终端里面启动gdb客户端

A.首先设置模拟器端口转发:$adb shell#adbforward tcp:1234 tcp:1234

B.启动arm-eabi-gdb:在Android源码的prebuilt/linux-86/toolchain/arm-eabi-4.4.3/bin下面有这个程序,当然你也可以选择其他版本的gdb,argc为程序参数#~/source_code/prebuilt/linux-86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-gdb ~/source_code/out/target/product/generic/obj/EXECUTABLES/memtest_intermediates/LINKED/memtest[args]正常启动后会显示:GNUgdb (GDB) 7.1-android-gg2Copyright(C) 2010 Free Software Foundation, Inc.LicenseGPLv3+: GNU GPL version 3 or later<http://gnu.org/licenses/gpl.html>Thisis free software: you are free to change and redistribute it.Thereis NO WARRANTY, to the extent permitted by law.  Type "showcopying"and"show warranty" for details.ThisGDB was configured as "--host=x86_64-linux-gnu--target=arm-elf-linux".Forbug reporting instructions, please see:<http://www.gnu.org/software/gdb/bugs/>...Readingsymbols from/work_dir/android4.0.3/out/target/product/generic/obj/EXECUTABLES/memtest_intermediates/LINKED/memtest...done.(gdb)C.执行setsolib-xxx 这两个命令,建立符号链接(gdb)set solib-absolute-prefix  ~/out/target/product/generic/symbols/(gdb)set solib-search-path ~/out/target/product/generic/symbols/system/lib/D.连接gdbserver进行调试:(gdb)target remote :1234成功的话显示:Remotedebugging using :1234Readingsymbols from/work_dir/android4.0.3/out/target/product/generic/symbols/system/bin/linker...done.Loadedsymbols for/work_dir/android4.0.3/out/target/product/generic/symbols/system/bin/linker__dl__start() at bionic/linker/arch/arm/begin.S:3535       mov    r0, sp(gdb)

另一个控制台会显示:Remotedebugging form host 127.0.0.1

如果没执行setsolib-×××的两个命令会显示如下信息:warning:Unable to find dynamic linker breakpoint function.GDBwill be unable to debug shared library initializersandtrack explicitly loaded dynamic code.0xb0000100in ?? ()如果list查看不了,说源文件不在,我们可以查看源文件路径,并且设置文件路径(gdb)show directories(gdb)set directories xxxx/android

4.最后终于可以进行gdb调试了

Gdb调试工具是基于命令行的,调试命令可以参考如下连接:http://blog.csdn.net/dadalan/article/details/3758025

设置断点命令:breakpointn或bn,n为程序行号或是函数名称,例如在main函数出打上断点(gdb)b mainBreakpoint1 at 0xa504: file system/extras/tests/memtest/memtest.cpp, line 107.

         从断点开始继续执行:continue或c,例如:(gdb)cContinuing.

Breakpoint1, main (argc=1, argv=0xbea51c84)             atsystem/extras/tests/memtest/memtest.cpp:107107       if (argc == 1) {

单步执行:next或 n,例如:(gdb)n106   {(gdb)n107       if (argc == 1) {(gdb)n108           usage(argv[0]);(gdb)n109           return 0;

打印变量值:printparam 或 pparam,param为变量名,例如打印argc的值:(gdb)p argc$1= 1

含有很多有用的命令,查看当前运行程序的源码:list或l,查看函数堆栈:bt,查看断点信息:infobreak,设置观察点:watch,退出gdb:q,终止程序:kill。程序调试运行完后,启动gdbserver的客户端会打印程序的运行结果,并停止server,如果要重新开始调试,不要忘了先启动gdbserver,再启动gdbclient。

这里只介绍了Androidgdb简单的使用方法,还有很多东西可以研究,例如调试动态库so,当然gdb本身还是有很多研究的地方的,甚至有着图形化工具不能完成的功能。有机会继续研究~ 

参考:http://sourceware.org/gdb/onlinedocs/gdb/
http://maricoliu.iteye.com/blog/1517675

android gdb gdbserver相关推荐

  1. Android gdb调试

    Android对于C/C++代码的调试方式一般选用gdb+gdbserver的方式,其中gdbserver运行在目标系统中(如手机),gdb运行在宿主机上(如linux).gdb主要有以下几个功能: ...

  2. gdb+gdbserver

    内容摘要 远程调试环境由宿主机GDB和目标机调试stub共同构成,两者通过串口或TCP连接.使用 GDB标准程串行协议协同工作,实现对目标机上的系统内核和上层应用的监控和调试功能.调试stub是嵌入式 ...

  3. gdb的简单使用和gdb+gdbserver方式进行ARM程序调试

    gdb的简单使用 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB ...

  4. eclipse gdb gdbserver 远程调试

    https://blog.csdn.net/linuxarmsummary/article/details/44975495 我们在 Linux 主机中搭建我们的开发环境,使用 Ubuntu 10.0 ...

  5. openwrt gdb gdbserver调试方法汇总

    1.使能gdb, gdbserver make menuconfig enable gdb enable gdbserver .config 新增两行配置 CONFIG_PACKAGE_gdb=y C ...

  6. 基于hisilicon的arm平台搭建gdb+gdbserver调试环境

    这段时间搭建了一个基于hisilicon的arm平台搭建gdb+gdbserver调试环境,网上对hisilicon平台的搭建资料不多,基本上是arm-linux-gdb的,而没有arm-uclibc ...

  7. VsCode + gdb + gdbserver远程调试arm嵌入式linux C/C++程序

    基本流程跟我的另一篇文章<VsCode + gdb + gdbserver远程调试C++程序>一样,不一样的是需要重新编译gdb和交叉编译gdbserver. 一.准备工作 sudo ap ...

  8. Android之gdbserver/gdb调试

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

  9. android gdb 远程调试工具,Android下用gdb远程调试办法

    Host: ubuntu Target: Android ICS 1. 将gdbserver和gdbclient分别放入target和host.两者都可在android源代码的prebuilt目录下找 ...

  10. android gdb 远程调试工具,gdb输入/输出错误远程调试到Android

    我试图调试一个调用本地代码来执行一些GL渲染的android应用程序.本机代码是我试图移植的现有代码(并且我不太清楚).我已经有了正确编译,链接和正确安装的代码,并且我有一些原生函数调用了从我的Jav ...

最新文章

  1. PHP+MySql获取自动增长字段的新添加记录ID值
  2. win10计算机拒绝访问,教你win10系统c盘拒绝访问怎么办
  3. 玩转Google开源C++单元测试框架Google Test系列(gtest)之七 - 深入解析gtest
  4. 字节JAVA研发面试
  5. python数据可视化第三方库有哪些_数据可视化!看看程序员大佬都推荐的几大Python库...
  6. 统计学习方法读书笔记1-统计学习方法概论
  7. 风之大陆互通服务器账号,风之大陆有几个服务器?服务器互通吗?
  8. python网络爬虫实战之下载笔趣看小说网小说
  9. IDEA告警:Field can be converted to a local varible
  10. Mathmatica的学习打卡day 16
  11. 中国石油大学(北京)-《 完井工程》第三阶段在线作业
  12. linux升级失败无法启动应用程序,Ubuntu升级后无法启动 kernel panic - not syncing
  13. Dell H300/6i/6iR/H700/H800阵列卡配置(转)
  14. 洛谷3238 HNOI2014 道路阻塞 最短路 线段树(无代码)
  15. js内置对象处理-打印学生成绩单
  16. SEO巧妙运用方法分享
  17. 关键词分析工具-免费关键词分析软件
  18. 我的第一篇博文——写下我的规划
  19. 深度学习环境配置 和 CP-VTON 复现
  20. 线性代数学习笔记——第三十八讲——直线与直线的位置关系

热门文章

  1. wget 持续下载确保完成
  2. 「实战篇」开源项目docker化运维部署-搭建mysql集群(四)
  3. Vue.js 系列教程 5:动画
  4. 关于Alipay支付宝接口(Java版)下
  5. MyBatis多参数传递之默认命名方式示例——MyBatis学习笔记之十二
  6. cacti的安装与配置(一)安装
  7. 一份招聘需求的分析 (转载)
  8. 免费有理—五款免费的网络管理工具介绍
  9. zookeeper保证单一视图
  10. idea添加maven启动