Eclipse替代ndk-gdb断点调试Android NDK程序

一 概述:

Eclipse调试NDK程序的操作并不难,难的是环境的搭建。光是安装Eclipse就有不少问题,真是“大错不犯,小过不断”不胜期烦。在网上,已经有先行者记录下了Eclipse断点调试Android NDK程序的方法:

《Eclipse + ADT(包括NDK Plugin) + CDT 搭建Android NDK开发环境》
网址:http://blog.sina.com.cn/s/blog_48ed03c80101nhei.html

我遇到的情况与上文有些不同,上文开篇就说“Android应用程序的开发环境比较容易搭建”,但我在开发环境搭建时已经遇到问题了。光是Eclipse我就反复安装了三次。我遇到了很多上文没有提及的问题,可能是因为所在的平台不同的原因吧(我在MAC上搭的)。下面我将着重说明那些上文没有的内容。为求文章的连贯性,文本也会简要的提及一些上文已经有的重要内容,不过只作蜻蜓点水式的介绍,所以我也建议大家看看上文。

二 功能要求描述

*(Mac)OS X Yosemite 版本 10.10.2

* Android SDK +  android-ndk-r10e + ant + Eclipse + CDT + ADT

可以在Eclipse编写及调试NDK程序(断点调试)。效果图如下:

三 实现方法

3.1 环境搭建遇到问题的解决方法

3.1.1 Android SDK 的下载

因为JDK的官网可以直接访问,所以JDK下载及安装都比较顺利。我遇到的问题是Android SDK的下载。我是在“Android Developer”(Android 官网)上找Android SDK的安装包的。所以第一问题来了:百度直接搜出来的只是“Android Developer”的旧版镜像。下面是当前我分别在百度及必应两引擎上,找到的“Android Developer”的主页。

这个蓝色背景的,是bing上搜出来的“Android Developer”官网。从网址看来,这个才是实时的官网版的网站。应该补充说明的是,该网对于我们来说是不能直接访问的。我是用了代理才能访问。为什么不能直接访问的原因,其实搞技术的人都懂的(^_^).

这个白色背景的,是百度上搜出来的“Android Developer”官网。从网址看来,并不是“Android Developer”官方网站。但其内容却得确是“Android Developer”官网旧版本的内容。而且该网我们可以直接访问(虽然有点慢)。所以这只是一个国内的镜像,其更新速度一定没有真正官网那么快。

建议大家到真正的官网上下载Adnroid SDK,Android NDK 及 ADT 等工具。并且下载时尽可能地使用下载工具而不是直接下载(我用的是“迅雷”)。原因是:真正的官网上的工具版本都比较新;很多下载工具无需设置代理也能下载到国外的资源。再者我的代理是有流量上限的。用工具下载,可以节省流量查来问题。

3.1.2 Android SDK 的更新

Android SDK 的更新不能直接更新。这是我遇到的第二个问题。我曾想去用“迅雷”代为下载。但发现如下这个文件,“迅雷”也下载不了:

只好上网查另外的方法,结果查到了两种用修改本地hosts映射到可用ip的方法。

方法一:

把如下的host设置加入到 /etc/hosts中:

#第一组设置 
#203.208.49.162 dl.google.com                                                   
#203.208.49.162 dl-ssl.google.com

#第二组设置                                               
203.208.49.164 dl.google.com
203.208.49.164 dl-ssl.google.com

上面两组设置中,用一组就可以了。两组IP,不保证长期有效。完成上面的设置,启动Android SDK Manager就可以成功更新了。这也是我查到的最简单的方法。该方法有个问题:小部分更新包会下载失败。

方法二:

使用“栋力无限”Android源。请进入如下网址:

http://www.sxrczx.com/pages/ubuntu.uestc.edu.cn/android/repository/index_1431450123772.html

或者百度一下:栋力无限镜像站-Android镜像站点使用帮助 。 按网页中的说明进行操作即可。 该方法的步骤相对多一些。好处是,更新包都能下。

3.1.3 Eclipse的获取及安装

Eclipse的官方下载网址是:http://www.eclipse.org/downloads/。我在这里遇到的问题仍然是下载失败。官默认下载的是Eclipse的自动安装程序,该自动安装程序用“迅雷”可以很方便地下载到。但在使用该自动安装程序安装Eclipse时,该程序会到国外的服务器上下载文件,这时的下载会失败。所以我们应该直接下载程序包:

我下载的是上图中,最下面的那一个。因为那个自带了CDT。无需另外安装。如果你下载的是无CDT的版本,那就要记住,先装CDT再装ADT.而在安装ADT时,我按装说明输入网址后,同样出现下载失败的问题,所以我直接到Android官网上下载其程序包了。下载的页面是:http://developer.android.com/intl/zh-cn/sdk/installing/installing-adt.html
同样要用“迅雷”下。在安装ADT时我遇到了一个很吓人的警告,说是签证有问题部分文件会无效或不安装。其实这个不用怕,直接点击"OK"就是了。因为Android官网就是这样说的:

3.2 导入NDK工程及相关设置

直接创建JNI工具的方法已经在《Eclipse + ADT(包括NDK Plugin) + CDT 搭建Android NDK开发环境》一文中有详细说明了。所以本文只说导入时的注意事项。我导入的是NDK Sample中HelloJni。导入NDK工程是与导入普通Android工程方法是相同的。所以不冗述,这里重点说导入后的设置。

3.2.1 设置好Android SDK及Android NDK

用“视窗键+,”进入"Preferences"设置。如下图,你会找到设置SDK及NDK的地方的

上面是SDK,下面是NDK:

3.2.2 Native相关设置

加入Native支持。在Package Explorer中选中刚导入的HelloJni工程,右键选择Android Tools ->
Add Native
Support..,填写导入的动态库的名称,这可以对照已经有的Android.mk文件中的LOCAL_MODULE设置。注意,“Add Native
Support..”这个操作会自动生成一些.mk文件及.c文件。这有可能与导入的原工程冲突应注意(必要的操作前备份一下重要的文件)。一般来说删掉自动生成的文件即可解决冲突问题。不能省略“Add Native
Support..”这一步操作,否则Eclipse会出现找到不C++菜单选项的问题。

加入C/C++头文件路径。在Package Explorer中选中刚导入的HelloJni工程,右键选择Properties。

实质上我只导入了一个目录,如下:

/Users/apple/installed/android-ndk/android-ndk-r10e/platforms/android-14/arch-arm/usr/include

其它目录是自动导入的。自己导入的目录与选定的目标API版本有关。到了这里HelloJni就可以编译了。

3.2.2 Android工程的修改

因为直接使用JDB调试有一个问题,那就是程序要已经启动了,JDB才可以连接。这个就会“错过”了程序启动的的代码。我在网上查到了一种直接用代码停住程序的方法:加入“android.os.Debug.waitForDebugger();”

public class HelloJni extends Activity
{
    ......
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
 
        //就是下面这一句代码可以让程序停下来等待JDB的连接 
        android.os.Debug.waitForDebugger();
         
        TextView  tv = new TextView(this);
        tv.setText( stringFromJNI() );
        setContentView(tv);
    }
 
    ......    
}

到这里就可以断点高调试NDK程序了。

3.2.3 最后一些问题

问题:可以编译,但调试时出现“Unknown Application ABI”错语。 解决方法:在Androidmanifest.xml中修改minSdkVersion及targetSdkVersion即可解决(调高一点)。

问题:调试时弹出的设备选择窗中没有设置选项。 解决方法:其实不是没有设备,只是需要滚屏才能看到选项。在备选择框中上下滚民间即可看到设备选项。

问题:设置了C代码中的断点,但程序没有停下来。解决方法:检查“android.os.Debug.waitForDebugger();”这一句是否有加入程序。另外需用"Debug As"->“Android Native Application” 进行设试

时间: 2024-08-02 06:59:24

Eclipse替代ndk-gdb断点调试Android NDK程序的相关文章

用GDB远程调试android native程序

上次写了几个native程序,想着如何调试,经过一阵子搜索和测试,终于完成了.有几个关键点: 1 gdb和gdbserver 因为这两个需要配套,建议使用同一个ndk下面的gdb和gdbserver gdbserver的是在 android-ndk-r9\prebuilt\android-arm\gdbserver 这个目录下 gdb 是在 android-ndk-r9\toolchains\arm-linux-androideabi-4.8\prebuilt\windows-x86_64\bi

gdb 远程调试 android native 程序

先看一张原理图: 我是 Linux 和 Android 双料 0 基础,目前对 gdb 了解的很浅显.(注意:在 Android 上执行的命令,需要在 adb shell 下执行.) ①      打开命令终端(Ctrl + Alt + T),输入 adb shell.在 Android 的 data 目录下新建一个目录,如 dog_ld. ②      将 gdbserver 和要调试的程序从 Linux 拷贝到 Android 的 /data/dog_ld 目录. ③      进入 And

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

最 近写了些需要跨平台兼容的C++库,Android是其中需要兼容的平台之一.区别于Windows,Mac中功能强大的IDE环境,官方并没有为 Android ndk提供太多的支持.因此,尝试了下通过一些配置使用gdb来调试Android ndk的C++程序,感觉还算方便,记录下来跟大家分享. 先 说明下,这里所谓的ndk native程序跟Android上层java应用没有什么关系,也不需要涉及jni来封装native接口,通俗来讲,就是把编译好的纯C/C++程 序,push到Android设

Eclipse+CDT+GDB调试android NDK程序(转)

Eclipse+CDT+gdb调试android ndk程序 先介绍一下开发环境,在这个环境下,up主保证是没有问题的. ubuntu 11.10 eclipse 3.7(indego) for java jdk 6 android sdk 2.2 andrid ndk r7 当然,在windows环境下通过cygwin等工具也是可以实现gdb调试的,我也确实实现过.但是性能实在太低,卡的根本没法用.Linux下直接用gdb调试本地方法是很流畅的. 再确定安装并配置好开发环境之后,就可以开始了.

使用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.

cocos2d-js 调试办法 断点调试 Android真机调试

一 使用浏览器chrome打开程序,进行调试.跟普通js程序一样. 要么自行搭建服务器,利用python脚本,或者用其他服务器程序(LAMP或XAMPP).然后用浏览器打开服务器地址. 要么直接使用cocos提供好的命令行:cocos run –p web 浏览器调试好处是,方便,对于小程序或者非native代码是非常有意义的.但部署到真机后遇到的问题,这就无法解决了,而且一些native代码也无法调试. 二 使用firefox远程调试. 因为cocos2d-js使用spidermonkey作为

使用 JDB 调试 Android 应用程序

By Huang Tao of TinyLab.org 2015/04/13 前言 自从有了各种 IDE 工具,程序猿调试工作轻松了不少,只要在 IDE 上面点击两下按钮,各种程序运行时的信息全部都显示在屏幕上面,很美好的一件事情,我们都要感谢开发这些 IDE 工具的前辈,是他们让我们的工作变得这么"轻松简单",但是对于我个人来说,不是很喜欢这些 IDE 工具: 第一是因为这类 IDE 工具实在是变化太快,我们要花费很大的时间成本来学习这一类工具,然而当你好不容易熟悉了一种工具之后,别

Ubuntu16.04 中 Vscode 如何断点调试C语言程序

个人博客链接:Ubuntu16.04 中 Vscode 如何断点调试C语言程序 问题:环境是 Ubuntu16.04,如何使用 Vscode 断点调试C语言程序. 写代码没有调试环境是不能忍受的,所以折腾了一下,最后成功了.折腾的过程是这样的: 1. 首先安装 C/C++ 扩展,直接搜索第一个就是,或者点此 链接 查看其帮助文档进行安装. 2.然后打开当前项目目录,左边点调试选项,点击添加配置,生成了一个launch.json文件,其内容如下: { // Use IntelliSense to

gdb 远程调试android进程 -转

什么是gdb 它是gnu组织开发的一个强大的unix程序调试工具,我们可以用它来调试Android上的C.C++代码. 它主要可以做4件事情: 随心所欲地启动你的程序. 设置断点,程序执行到断点处会停住.(断点可以是表达式) 程序被停住后,可以查看此时程序中发生的事. 动态改变程序的执行环境. GDB远程调试原理图 如图上所示,我们需要使用gdbserver依附到我们要调试的进程上,gdb通过adbd和手机上的gdbserver 进行socket通信. 远程调试实战 在手机上启动gdbserve