Eclipse调试C++(Cocos2dx Android )
原文链接: http://www.cnblogs.com/zouzf/p/4202537.html
先说windows下的,mac下的在最后
环境:win8.1、java 1.5、Eclipse 4.3.1、ADT bundle 22.6.2.v20140321、NDK r8e、cocos2dx 2.2.3
前提:下载好cocos2dx、NDK(r8e以上版本可以不装cygwin) 、ADT bundle(带Eclipse、sdk等各种插件),配置好 JAVA_HOME、CLASSPATH、NDK_ROOT、ANDROID_SDK等环境变量;配置好Cocos2dx的Android开发环境,即可以通过ndk-build编译cocos2dx的工程生成 .so文件、生成生成jar包、能成功运行HelloCpp工程。注意:所有涉及到的目录不要有中文或者空格!
1、把Eclipse的workSpace目录里的 .metadata 文件删除,恩,Eclipse我设置了不自动build~~ 然后打开Eclipse把cocos2dx工程(Q:\cocos2d-x-2.2.3\cocos2dx\platform\android)和HelloCpp工程(Q:\cocos2d-x-2.2.3\samples\Cpp\HelloCpp\proj.android)导进去:File->import->Android->Existing Android Code Into WorkSpace->next<在Root Directory里填上cocos2dx工程所在的目录,按回车键,cocos2dx的工程就出现,并且会自动选上,点finish,搞定。同样,也把HelloCpp工程导进去。
2、TestCpp工程报错说不认识bash :Error: Program "bash" not found in PATH
解决:(1):给Eclipse配置好NDK路径
(2):设置TestCpp项目的C/C++ builder :ndk-build.cmd NDK_DEBUG=1 。注意:NDK_DEBUG=1 等号左右不要留有空格
3、build一下TestCpp工程,会报错:
D:/new_soft/android-ndk-r8e/build/core/add-application.mk:: Android NDK: WARNING: APP_PLATFORM android- is larger than android:minSdkVersion in ./AndroidManifest.xml
把工程里的AndroidManifest.xml文件里<uses-sdk android:minSdkVersion="8"/>的8改成9。查了一下文章,说这是NDK的一个bug:AndroidManifest.xml里的minSdkVersion设置不能小于项目用于编译的SDK版本,而HelloCpp项目用于编译的sdk版本是 2.2.3.。。。也就是 sdkversion 是 9.。。。。
4、刷新,再build,还报错:
jni/Android.mk:: *** Android NDK: Aborting. . Stop.
Android NDK: jni/Android.mk: Cannot find module with tag 'cocos2dx' in import path
Android NDK: Are you sure your NDK_MODULE_PATH variable is properly defined ?
Android NDK: The following directories were searched:
Android NDK:
说的是Android.mk文件里的19行 找不到 cocos2dx,大概意思是找不到这个cocos2dx这个模块,类似于#include头文件时要加上对应的搜索路径的意思,那就补上这个模块的上一层目录:打开Android.mk文件,在最后一行$(call import-module,cocos2dx) 之前加上一行: $(call import-add-path,Q:/cocos2d-x-2.2.3)。也就是加上cocos2dx这个文件夹所在的目录给mk文件去搜索。
注意里面的反斜杠:我们直接从windows下拷贝路径时 是 Q:\cocos2d-x-2.2.3的,要把 \ 改成 / 。如果你的cocos2dx工程所在的目录比较深,有很多层,要把路径里所有的 \ 都改成 / 。
5、刷新,再build,还报错:
Android NDK: Q:/cocos2d-x-2.2./cocos2dx/Android.mk: Cannot find module with tag 'libjpeg' in import path
Q:/cocos2d-x-2.2./cocos2dx/Android.mk:: *** Android NDK: Aborting. . Stop.
Android NDK: Are you sure your NDK_MODULE_PATH variable is properly defined ?
Android NDK: The following directories were searched:
Android NDK:
恩,同样的错误,说的cocos2dx工程的Android.mk文件的175行上找不到 libjepg,注意,cocos2dx工程的mk文件不在它的工程目录下,而是在它的上两层,在 Q:/cocos2dx-2.2.3/cocos2dx 下面,打开它,在175行的$(call import-module,libjpeg)之前插入一句: $(call import-add-path,Q:/cocos2d-x-2.2.3/cocos2dx/platform/third_party/android/prebuilt)。注意斜杠转成反斜杠! 因为libjepg是第三方库,放在cocos2dx\platform\third_party\android\prebuilt这个目录里的。
注意:第4、5步添加 ndk module 时都是用了绝对路径,在不同电脑上都要重新配置一下。你也可以改成相对路径,可惜我还不太熟悉mk文件的一些东西,以后再改~~
6、再build,嗯,好像成功了,成功生成了libhellocpp.so文件~~看到libs文件夹下生成了一个gdbserver文件和gdb.setup文件没,就是因为上面设置 NDK_DEBUG=1 所以生成的,gdbserver会被部署到手机里。当触发C++断点时,相当于手机端的gdbserver是服务端,会发送一些信息到Eclipse这边,Eclipse这边的gbdserver是客户端,Eclipse这边的gdbserver接收到信息就进行相关操作,嗯,我猜的~~
下面说的是如何调试cpp文件
1、右键cocos2dx工程,选择 Android tools -> Add Native Support,so文件的名字不用改,点finish
2、刷新,build cocos2dx工程,报错:
D:/new_soft/android-ndk-r8e/build/core/add-application.mk:: Android NDK: WARNING: APP_PLATFORM android- is larger than android:minSdkVersion in ./AndroidManifest.xml
把工程里的AndroidManifest.xml里 <uses-sdk android:minSdkVersion="8"/> 的 8 改成 9
3、刷新,build cocos2dx工程,没报错了,再build HelloCpp工程,也没报错了
4、加入需要调试的C++文件:
(1):右键 hellocpp工程,new->folder
(2):选中HelloCpp,下面点 advanced,选择最后一个选项:Link to alternate location(Linked Folder),在下面输入要导进来的cpp所在的目录(这里我填了 Q:\cocos2d-x-2.2.3\samples\Cpp\HelloCpp\Classes),点 finish即可:
注意:文件夹名 不能和工程里已有的文件同名。
5、打开刚才加进来的CCNode.cpp文件,发现里面一大堆错误,包括各种#include的.h文件找不到,各种不能识别的符号或者各种 unknown symbol~~,我猜这个问题是因为只导入少数几个cpp文件,这几个cpp文件依赖的其他的cpp文件没有加进来的原因,如果把所有cpp文件都加进来估计是可以的,我没试过~~(因为libcocos2dx工程在目录cocos2dx下面,不能直接把cocos2dx这个目录加进来,要把里面的CocosDenshion、extensions等目录一个个加进来~~)
解决方法:右键cocos2dx工程,属性,C/C++ General->Code Analysis,选择 使用项目设置,然后把下面的勾都去掉,如下:
6、刷新,再build两个项目,应该都没有问题了
7、在刚才加进来的随便一个cpp文件里断点,右键选择HelloCpp工程,debug as->android native application(请用真机调试,用模拟器的话不知道有啥问题不),居然报错:
8、原来是assert文件夹里的资源没有,可能也是相对路径又问题引起的吧,没有把Resources里的资源拷过来吧,把Q:\cocos2d-x-2.2.3\samples\Cpp\HelloCpp\Resources里的所有东西拷到Q:\cocos2d-x-2.2.3\samples\Cpp\HelloCpp\proj.android\assets下,再跑,debug as->android native application,成功!
注意:调试C++的时候,gdbServer会有所延迟(大概有好几秒,和你的电脑和调试的手机的性能有关吧),所以你的断点最好不要加在程序启动的那些代码里,上面截图就是加在一个菜单的点击事件里的,点击关闭菜单时触发。
线程、单步、变量观察~~perfect~~
有些时候报以下形式的 Unknow Application ABI 错误:
这个折腾了我许久许久。。。但偏偏今晚不能重现,这种问题其实在上面已经涉及到了的,只不过这种log的形式很迷惑人,看到红色框没,只要竖着读就很清晰了:Android NDK warning:App_Platform android-14 is larger than android:minSdkVersion 8 in ./AndroidManifest.xml .......是不是很熟悉~~~~~~有一些找不到module的如Cannot find module with tag 'cocos2dx' in import path 错误也会以这种形式报错,哎,坑爹
PS:因为我用的Eclipse加了个汉化包。。。但又想在文章涉及到Eclipse设置的一些东西尽量用英文版的。。。所有有些地方用文字说的和截图的有所差别,见谅~~
发布release版本时记得把工程属性里配置的 NDK_DEBUG=1去掉~~
感觉这个东西的重点就在于了解Android.mk文件吧,把里面的配置看懂,在这过程中看报什么错,就对应修改就是了。反正暂时我还是不怎么了解,所以文章里充满了大量的我猜等字眼~~先用着,再研究吧
mac下也差不多是这个步骤,如果大家有什么问题的话,把详细信息贴出来,我尽量把我知道的分享出来~~
mac下明明配置了NDK_ROOT,Eclipse运行的时候一直说找不到:直接在对应工程的mk文件的首行设置 NDK_ROOT="~~~~~~~~~~" (~~~表示你的ndk所在的目录,如: D:/new_soft/android-ndk-r8e)
原文链接: http://www.cnblogs.com/zouzf/p/4202537.html
Eclipse调试C++(Cocos2dx Android )的更多相关文章
- 【转】Android Eclipse调试技巧
原文地址:https://www.cnblogs.com/tianchunming/p/5423942.html Android Eclipse调试技巧 在Android 应用程序开发中我们经常需 ...
- 于Eclipse在建筑cocos2d-x的Android开发环境(避免cygwin)
于Eclipse在建筑cocos2d-x的Android开发环境(避免cygwin) 在袭击几天学习Android开发之后,我開始转向cocos2d-x的Android开发了.因为自己曾经有了解过co ...
- Android 开发笔记“Eclipse 调试和快捷键”
原文地址:http://blog.sina.com.cn/s/blog_5cf876340100aswr.html Eclipse 调试器和 Debug 视图 Eclipse SDK 是针对 Java ...
- Mac系统cocos2dx + android 开发环境配置
Mac系统cocos2dx + android 开发环境配置 /****************************************************** 这遍文章主要转载自:htt ...
- cocos2dx android版本移植时的Error format not a string literal and no format arguments解决方案
原文地址 : http://www.cnblogs.com/hhuang2012/p/3336911.html cocos2dx android版本移植时的Error format not a str ...
- cocos2d-x Android 环境搭建问题汇总
初次接触Cocos2d-x,准备搭建一个hello world的Android环境,问题遇到很多.在此记录,为自己,也为大家,避免重走弯路! 具体的环境搭建,可以参考官方的文档.在Windows7平台 ...
- cocos2d-x Android环境搭建
1.Java虚拟机.分32位和64位.64位: jdk-8u11-windows-x64-8.0.11.12.1406275777 环境变量配置,我的电脑右击->属性->高级系统设置-&g ...
- cocos2dx android resources.ap_ does not exist
当我们在eclipse中打开cocos2dx自动创建的工程时,经常会出现错误: cocos2dx android resources.ap_ does not exist 这是因为android工程的 ...
- Android调试桥-Android Debug Birdge详解
原文:http://android.eoe.cn/topic/summary Android调试桥-Android Debug Birdge Android调试桥(adb)是一个多功能的命令行功具,它 ...
随机推荐
- 【爱江山越野跑】ITRA积分认证流程
背景:目前在越野跑领域,高级别的赛事有很多,比如UTMB,TDG等,而想报名参与这些赛事需要一定的积分(ITRA积分), 而这些积分的获得,需要参与获得ITRA认证的赛事,赛事难度不同,获得的积分也不 ...
- Alpha matting算法发展
一.抠图算法简介 Alpha matting算法研究的是如何将一幅图像中的前景信息和背景信息分离的问题,即抠图.这类问题是数字图像处理与数字图像编辑领域中的一类经典问题,广泛应用于视频编缉与视频分割领 ...
- PANDAS 数据合并与重塑(join/merge篇)
pandas中也常常用到的join 和merge方法 merge pandas的merge方法提供了一种类似于SQL的内存链接操作,官网文档提到它的性能会比其他开源语言的数据操作(例如R)要高效. 和 ...
- 利用python输出000至999中间的数
打造一个000-999的字典 ): : i = '+str(i) elif <=i and i<: i ='+str(i) else: i=str(i) with open('1.txt' ...
- CAS SSO单点登录框架介绍
1.了解单点登录 SSO 主要特点是: SSO 应用之间使用 Web 协议(如 HTTPS) ,并且只有一个登录入口. SSO 的体系中有下面三种角色: 1) User(多个) 2) Web 应用( ...
- 2154: Crash的数字表格
2154: Crash的数字表格 Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 3372 Solved: 1258[Submit][Status][ ...
- Parrot Linux国内源
China USTC (University of Science and Technology of China and USTCLUG) - Hefei University 1 Gbps for ...
- 如何cancel掉慢查询
百度Elasticsearch-产品描述-介绍-百度云 https://cloud.baidu.com/doc/BES/FAQ.html#.E5.A6.82.E4.BD.95cancel.E6.8E. ...
- Linux基础服务
作业一:nginx服务1.二进制安装nginx包 [root@bogon ~]# systemctl disable firewalld #关闭Firewalld自启动 Removed symlink ...
- vue-cli注册全局组件
在main.js开头引入组件,然后注册组件,例如: import Vue from 'vue' import VueRouter from 'vue-router' import VueResourc ...