最 近写了些需要跨平台兼容的C++库,Android是其中需要兼容的平台之一。区别于Windows,Mac中功能强大的IDE环境,官方并没有为 Android ndk提供太多的支持。因此,尝试了下通过一些配置使用gdb来调试Android ndk的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/prebuilt/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在程序入口。
本文不会讨论gdb调试命令的具体用法,相关文章网上应该很多,或许后续会写篇使用gdb的心得体会。另外也可以把编译和调试命令配置到一些通用IDE中更方便使用,比如eclipse,codeblocks等。

转载于:https://www.cnblogs.com/xunbu7/p/3968346.html

使用GDB调试Android NDK native(C/C++)程序-转相关推荐

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

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

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

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

  3. 使用 GDB 调试 Android 应用

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

  4. 使用GDB调试android模拟器

    使用android的模拟器可以调试应用,也可以调试C/C++代码库. 调试C/C++代码时,还可以使用GDB单步调试代码,跟linux上一样方便. 1. 准备android代码:从官网上下载代码,编译 ...

  5. GDB调试带参数argc argv的程序

    程序正常运行 ./a.out -i item1 使用GDB调试 gdb a.out gdb>set args -i item1 gdb>run

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

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

  7. gdb调试android

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

  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. 如何测试并调试基于 NDK 的 Android 应用

    本文概述了如何为 x86 平台测试和调试基于 NDK 的应用. 本文将从头至尾完整展示如何创建示例应用,并演示如何测试和调试. 1. 开发环境 请确保已安装了 Android 应用开发环境. 如果尚未 ...

  10. Android NDK调试出错Unknown Application ABI, Unable to detect application ABI#39;s的解决方式...

    今天在调试Android NDK的时候,ADT的控制台报了这个错误: Unknown Application ABI, Unable to detect application ABI's 在网上查了 ...

最新文章

  1. c++ map 析构函数_C++学习刷题6--C++类的使用:构造函数、析构函数和类的使用
  2. 关于 Delphi 中流的使用(6) 用流读写结构化文件
  3. php cms 的模板修改,phpcms v9后台登陆模板修改方法和程序版本更新提示修改方法...
  4. 【git】【eclipse】记住密码/密码保存在哪里?
  5. java 问题排查_JAVA问题排查笔记
  6. MySQL中查询时间最大的一条记录
  7. 电脑桌面便签_在电脑桌面使用敬业签怎么操作退出团队便签?
  8. 10个不太为人所知的,但实用的PHP函数(转)
  9. java zip 压缩文件夹_java来实现zip压缩文件或者文件夹
  10. ENVI5.3.1使用Landsat 8影像进行图像融合
  11. 利用简单电阻分压原理自动测量电阻
  12. 如何面试软件工程师 看这篇就够了
  13. 虚拟机怎样使用代理服务器上网,VMware虚拟机使用NAT模式上网的方法
  14. 依据CCS分类建树(简单方案)
  15. 每天学点5G-5G UDR
  16. java接口防抖_RxJava功能防抖
  17. 谷歌的天敌竟然是亚马逊:从开放7-Mic阵列授权说起
  18. 35岁不是程序员职场中的绊脚石
  19. 本地计算机出现多个网络连接,电脑网络连接出现感叹号?教你一招解决
  20. OO之美:好代码和坏代码

热门文章

  1. 安志清PHP:dedecms织梦常用标签大全,只有你没见过的
  2. snmp+mrtg监控-note
  3. 解决ubuntu的firefox上网速度慢[转]
  4. WebGIS系统的设计与实现
  5. 锁开销和上下文切换开销
  6. 支付宝架构到底有多牛逼?看完这篇你就明白了!
  7. JVM 大厂面试都会问,都会这么问,你能顶住么?
  8. 为什么优酷的《楚乔传》画质更清晰?独家解密窄带高清技术
  9. 为什么说传统分布式事务不再适用于微服务架构?
  10. Android 秒级编译 Freeline