`
thinkry
  • 浏览: 39550 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

android下的gdb调试

阅读更多

我在android上调试native程序时,参考了网上不少文章,这里结合我的经历做些注解

 

第一步、先列清楚我使用的环境

手机:是台真实手机,不是模拟器,已经root了

电脑:是windows7系统,网上不少是用linux来讲解的

AndroidSDK:路径假定是%ANDROID_SDK%,那么建议把%ANDROID_SDK%\platform-tools目录加到PATH环境变量中,这样能在命令行直接使用adb了

AndroidNDK:我用的是r9b版本,路径假定是%ANDROID_NDK%

gdbserver:该文件在%ANDROID_NDK%\prebuilt\android-arm\gdbserver\下

gdb:该文件在%ANDROID_NDK%\toolchains\arm-linux-androideabi-4.8\prebuilt\windows\bin\下,建议用arm-linux-androideabi-4.8目录的,和gdbserver版本一致

RootExplorer:手机root后基本都会安装的软件,有的也叫RE管理器

 

第二步、把gdbserver放到手机里

 

方法1:使用adb push,参照网上教程,但在我的手机上提示权限不足。我用adb shell,再su切换到root,发现许多操作都没权限,估计是手机root不彻底导致或别的啥原因,搜索资料没找到原因

 

方法2:要把gdbserver放到手机里,还有简单方法,usb连接电脑后,把gdbserver拷贝到SD卡上,然后用RootExplorer拷贝到/data/bin/(目录你可以自行选择,我是放在/system/xbin/下),然后在RootExplorer里把gdbserver的执行权限加上,这样就能执行gdbserver了

 

第三步、把手机上相关文件复制到电脑上来

 

具体要把手机上的/system/lib目录下的所有文件和待调试程序的so(在/data/data/待调试程序包名/libs/下)复制到电脑上

 

复制方法:用RootExplorer吧,先复制到SD卡,再从SD卡复制到电脑上,假定目录是c:\work\

 

还要注意一点,待调试程序的so要求有符号表信息,也就是说是没strip的版本,也就是一些资料上说的xxx/out/target/xx...xx/symbols/system/lib。我不是用这种方式编译,路径和这个不一样,但原理都是没strip掉符号表的so

 

第四步、启动要调试的程序后,运行gdbserver

 

方法1:在adb shell-->su后,执行"gdbserver :1234 --attach 待调试程序PID"

但这一步在我的手机上提示权限不足,参见第二步方法1的说明

 

方法2:我在应用宝搜索安装了个"ssh服务器",也就是QuickSSHd,设置好端口和密码,运行sshd后,就能想登录linux服务器一样登录手机了。

麻利的打开SecureCRT,连接上去,su后各种权限正常,太爽了。

执行"gdbserver :1234 --attach 待调试程序PID"能正常attach的目标进程

 

第五步、在电脑上进入gdb所在目录,执行arm-linux-androideabi-gdb.exe

shell adb forward tcp:1234 tcp:1234  //如果没把%ANDROID_SDK%\platform-tools目录加到PATH环境变量中,这里会报错

file c:/work/libApplicationMain.so        //如果不用file加载待调试程序的so,那么info threads时只会显示1个线程

set solib-search-path c:\\work          //如果不set solib-search-path,那么就看不到符号信息,只会看到 ??()这样的指示

target remote :1234//开始正式gdb

info threads//查看线程

 

当你想知道GLThread线程ID时,有个简单办法是在DDMS中查看Thread ID,然后和info threads中输出的对照下,从而在thread ID执行中输入正确的ID

 

其他说明:

 

1、网上有个编译好的strace工具,也可以放在手机上,用strace来统计、分析程序的系统调用情况,放在附件中了。

 

2、VisualGDB主要是为gdb增加了个可视环境,还是用gdbserver和gdb来调试的,在我的手机上也是因为adb shell权限不足问题无法使用。

 

分享到:
评论

相关推荐

    aarch64-linux-android-gdb.zip

    《深入解析aarch64架构下的Android GDB调试技术》 在移动设备和嵌入式系统领域,aarch64架构已经成为主流,特别是在Android平台上,它为开发者提供了强大的64位计算能力。与此同时,为了更好地调试和优化软件,理解...

    gdb动态调试android可执行程序1

    gdb动态调试Android可执行程序 标题:gdb动态调试Android可执行程序1 描述:gdb动态调试Android可执行程序1 标签:android 知识点: 1. Android NDK:Android NDK是一组工具集,允许开发者使用C++和其他native...

    aarch64-linux-android-gdb

    aarch64-linux-android-gdb 可调试arm64位内核的工具,目前自己测试可用

    Eclipse+CDT+GDB调试android NDK程序

    ### Eclipse+CDT+GDB调试Android NDK程序详解 #### 开发环境确认与准备 在开始使用Eclipse+CDT+GDB调试Android NDK程序之前,首先需要确保已经搭建好以下开发环境: 1. **Ubuntu 11.10**:作为主要的操作系统,...

    android gdb工具(Linux版)

    `android gdb`工具就是专为在Linux环境下对Android设备进行远程调试而设计的,它相当于Linux开发中的GDB(GNU Debugger)的Android版本。本文将详细介绍`android gdb`工具的原理、配置过程以及使用方法。 首先,`...

    可以用于Android的gdb

    直接push到Android某目录下,然后adb shell登陆shell 就直接可以用这个gdb调试程序了

    android安装gdb说明

    本文将详细介绍如何在Android设备上安装并配置GDB/GDBserver,以便进行深入的系统层代码调试。 #### 二、GDB与GDBserver简介 1. **GDB**(GNU Debugger)是一款功能强大的开源调试器,它能够帮助开发者对程序进行...

    adb 下使用gdb调试的脚本

    在linux-x86下运行该脚本,即可以开始gdb的调试了。

    VisualGDB调试Android JNI和Linux项目

    VisualGDB调试Android JNI和Linux项目。详细的介绍了如何使用Visual GDB调试Android JNI项目和Linux项目。由于某些原因,图中部分内容被抹掉。敬请见谅。

    Eclipse+CDT+GDB调试android_NDK程序

    【Eclipse+CDT+GDB调试Android NDK程序】是一种在Android平台上调试原生C/C++代码的有效方法。在Android应用开发中,有时需要利用NDK(Native Development Kit)来编写高性能或底层的代码,这时就需要使用调试工具来...

    GDB之在线调试与Coredump分析

    GDB(GNU Debugger)是一个功能强大的程序调试工具,它用于C/C++等程序的调试。通过GDB可以执行以下操作:启动程序、设置断点、单步执行、改变变量的值、检查程序运行时信息等。在线调试是在程序运行的过程中进行...

    破解版VisualGDB调试cocos2dx下andriod(内置使用文档)

    vs下调试android apk利器, 破解版无后顾之忧。内附详细调试和使用说明。

    aarch64-linux-android gdb工具

    **Android与Linux下的GDB工具:aarch64-linux-android-gdb** 在移动开发领域,尤其是针对Android平台的原生代码调试,`aarch64-linux-android-gdb` 是一个非常重要的工具。它是一个专门为ARM64架构(aarch64)的...

    Android JNI 断点调试C++

    Android Studio集成了GDB,但也可以通过第三方工具如NDK-GDB进行更复杂的调试。 - 如果在调试过程中遇到问题,检查AndroidManifest.xml是否包含了`android:debuggable="true"`属性。 - 有些设备或模拟器可能不支持...

    android 无代码调试

    本篇文章将详细介绍如何在Android环境下进行无代码调试,以及如何在有代码和无代码两种情况下进行调试。 首先,我们要理解在Android平台上,调试主要分为两种类型:有源码调试和无源码调试。有源码调试通常使用...

    gdb for android

    android 设备的gdb调试工具,gdb版本7.11 ,使用android_ndk_r9c工具编译。使用时,adb push 工具到实际使用的目录采用, adb shell的方式进入android设备,然后 ./gdb 运行使用,开发这个的主要原因是为了解决内核...

    android6.0适用gdb/gdbserver以及linker

    GDB (GNU Debugger) 和GDBserver是Linux和Android系统中常用的远程调试工具,它们允许开发者在本地主机上控制运行在目标设备上的程序。本文将详细介绍如何在Android 6.0上安装和使用GDB及GDBserver,以及如何利用...

Global site tag (gtag.js) - Google Analytics