android gdb gdbserver
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相关推荐
- Android gdb调试
Android对于C/C++代码的调试方式一般选用gdb+gdbserver的方式,其中gdbserver运行在目标系统中(如手机),gdb运行在宿主机上(如linux).gdb主要有以下几个功能: ...
- gdb+gdbserver
内容摘要 远程调试环境由宿主机GDB和目标机调试stub共同构成,两者通过串口或TCP连接.使用 GDB标准程串行协议协同工作,实现对目标机上的系统内核和上层应用的监控和调试功能.调试stub是嵌入式 ...
- gdb的简单使用和gdb+gdbserver方式进行ARM程序调试
gdb的简单使用 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB ...
- eclipse gdb gdbserver 远程调试
https://blog.csdn.net/linuxarmsummary/article/details/44975495 我们在 Linux 主机中搭建我们的开发环境,使用 Ubuntu 10.0 ...
- openwrt gdb gdbserver调试方法汇总
1.使能gdb, gdbserver make menuconfig enable gdb enable gdbserver .config 新增两行配置 CONFIG_PACKAGE_gdb=y C ...
- 基于hisilicon的arm平台搭建gdb+gdbserver调试环境
这段时间搭建了一个基于hisilicon的arm平台搭建gdb+gdbserver调试环境,网上对hisilicon平台的搭建资料不多,基本上是arm-linux-gdb的,而没有arm-uclibc ...
- VsCode + gdb + gdbserver远程调试arm嵌入式linux C/C++程序
基本流程跟我的另一篇文章<VsCode + gdb + gdbserver远程调试C++程序>一样,不一样的是需要重新编译gdb和交叉编译gdbserver. 一.准备工作 sudo ap ...
- Android之gdbserver/gdb调试
1.查看cameraserver的pid # adb shell ps |grep cameraserver cameraserver 237 1 144332 94532 ptrace_sto 00 ...
- android gdb 远程调试工具,Android下用gdb远程调试办法
Host: ubuntu Target: Android ICS 1. 将gdbserver和gdbclient分别放入target和host.两者都可在android源代码的prebuilt目录下找 ...
- android gdb 远程调试工具,gdb输入/输出错误远程调试到Android
我试图调试一个调用本地代码来执行一些GL渲染的android应用程序.本机代码是我试图移植的现有代码(并且我不太清楚).我已经有了正确编译,链接和正确安装的代码,并且我有一些原生函数调用了从我的Jav ...
最新文章
- PHP+MySql获取自动增长字段的新添加记录ID值
- win10计算机拒绝访问,教你win10系统c盘拒绝访问怎么办
- 玩转Google开源C++单元测试框架Google Test系列(gtest)之七 - 深入解析gtest
- 字节JAVA研发面试
- python数据可视化第三方库有哪些_数据可视化!看看程序员大佬都推荐的几大Python库...
- 统计学习方法读书笔记1-统计学习方法概论
- 风之大陆互通服务器账号,风之大陆有几个服务器?服务器互通吗?
- python网络爬虫实战之下载笔趣看小说网小说
- IDEA告警:Field can be converted to a local varible
- Mathmatica的学习打卡day 16
- 中国石油大学(北京)-《 完井工程》第三阶段在线作业
- linux升级失败无法启动应用程序,Ubuntu升级后无法启动 kernel panic - not syncing
- Dell H300/6i/6iR/H700/H800阵列卡配置(转)
- 洛谷3238 HNOI2014 道路阻塞 最短路 线段树(无代码)
- js内置对象处理-打印学生成绩单
- SEO巧妙运用方法分享
- 关键词分析工具-免费关键词分析软件
- 我的第一篇博文——写下我的规划
- 深度学习环境配置 和 CP-VTON 复现
- 线性代数学习笔记——第三十八讲——直线与直线的位置关系