zoukankan      html  css  js  c++  java
  • 使用GDB调试Android NDK native(C/C++)程序

    使用GDB调试Android NDK native(C/C++)程序

    先说明下,这里所谓的ndk native程序跟Android上层java应用没有什么关系,也不需要涉及jni来封装native接口,通俗来讲,就是把编译好的纯C/C++程序,push到Android设备或者仿真器上,然后在设备上运行该程序。而调试则是通过attach到gdbserver来实现。推荐在Ubuntu或者mac osx下来进行,windows下要安装cygwin来模拟posix环境,速度很慢的说。具体操作如下:


    0. 准备工作
    首先确保机器上已经有Android开发环境,比如下载Android SDK以及NDK包,配置了相关环境变量,启动了Android设备或者仿真器等等。当然你也需要编译生成了带有调试Symbol的Native程序,我是用NDK下的gcc编译器通过自己配置编译环境来进行编译的,当然你也可以直接使用ndk-build。


    1. 在设备上部署gdbserver
    所谓部署其实就是把android ndk下的gdbserver拷贝到设备上,可以通过如下命令
    adb push $ANDROID_NDK_ROOT/prebuilt/android-arm/gdbserver/gdbserver /data


    2. 在设备上部署你的Native程序
    需要把你编译出的程序和相关so库部署到设备上,注意so库要放在/system/lib下,/system路径默认是只读的,可以通过adb remount来重置。
    adb push ./myapp /data/data
    adb push ./libmylib.so /system/lib


    3. 把设备上的相关调试环境拷贝到本地
    因为远程调试需要一些目标机的库,把如下文件拷贝到本地文件夹
    adb pull /system/lib ./debugging/lib
    adb pull /system/bin/linker ./debugging/lib


    4. 在设备上通过gdbserver运行你的程序
    adb shell gdbserver :12345 /data/data/myapp


    5. 在本地把本地TCP端口forward到设备的TCP端口
    adb forward tcp:12345 tcp:12345


    6. 在本地运行Android ndk路径下的gdb程序
    $ANDROID_NDK/toolchains/arm-linux-androideabi-4.4.3/prebuild/darwin-x86/bin/arm-linux-androideabi-gdb
    这里注意如果你在Ubuntu下用的是Linux的NDK包,那路径会有点不同,darwin-x86的地方应该是linux-x86.最保险的还是自己在NDK下搜索。


    7. 启动gdb后在gdb下设置solib搜索路径
    就是让gdb运行时能够找到调试相关的那些lib,也就是那些第三步中从设备上拉下来的文件。
    (gdb) set solib-search-path ./debugging/lib


    8. 在gdb下设置你希望调试的Native程序
    (gdb) file ./myapp


    9. 连接到设备的gdbserver
    (gdb) target remote :12345
    上面的6~9步也可以通过如下命令一步执行完
    $ANDROID_NDK/toolchains/arm-linux-androideabi-4.4.3/prebuild/darwin-x86/bin/arm-linux-androideabi-gdb --eval-command="set solib-search-path ./debugging/lib"  --eval-command="file  ./myapp" --eval-command="target remote :12345"


    10. 开始调试
    通过continue或c运行程序。注意不是用run,因为程序在目标机上其实已经启动了,只是break在程序入口。

  • 相关阅读:
    选择法与冒泡法
    递归法把一个整数通过字符串输出,谭浩强教材习题
    十六进制转十进制 2.0
    十六进制转十进制 谭浩强教材课后习题
    链表操作(改)--学生管理
    矩阵转置(有问题待补充)
    win10 PowerShell下安装vim编辑器
    wsl2+.net core+vscode开发调试环境
    git 一些常用的操作命令
    查看数据库所有表数据占用的空间大小
  • 原文地址:https://www.cnblogs.com/feika/p/4018735.html
Copyright © 2011-2022 走看看