当在android设备上好好的运行着用cocos2d-x的游戏时,突然,就退出了游戏。让人抓狂啊!找了半天不知道哪里出了错误。
只见在logcat 中出现一条红色的error,如下图
Fatal singnal 11 你妹,这是什么玩儿。 google 百度,半天。 只有 一个翻译“致命信号11” 。dogshit!!
编写android 代码惯了,只对红色 的error 级别的日志感兴趣了,完全忽略了绿色的debug级的日志。
仔细检索了一下日志 发现了一些有规律的绿色日志 如下
这它码不是 我的项目的包名。com.koolearn.hallowmastTTT 吗?哦它吗 如何是好。
网上寻找了一下如何搞定这个问题 ,热心的网友 说 ndk 里有个工具 adds2line 可以从这个日志里找到你代码错误的地方!
我他妈不信。 抱着试试的态度。我给查了一下adds2line 的用法 就总结如下了
1.制作一个能常用的脚本
#!/bin/sh
$NDK_ROOT/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/arm-linux-androideabi-addr2line -C -f -e obj/local/armeabi/libgame.so $1
打开文本编辑器复制上面的代码 并保存为adds2line.sh 放在你的工程目录下 ,当然是你的android项目工程根目录。 那个项目需要,就把它复制一份放在新项目里,脚本内容我就不解释了,想了解的上网查查。
如下图
2.使用这个脚本
打开您的终端 就这东西 ,进入您的android项目根目录 , 用adds2line.sh + 地址
命令步骤如下
localhost:cocos2d-2.0-x-2.0.4 lili$ cd ~
localhost:~ lili$ cd /Applications/androidsoft/cocos2d-2.0-x-2.0.4/HallowmasTTT/
localhost:HallowmasTTT lili$ ls
Classes Resourcesproj.android
localhost:HallowmasTTT lili$ cd proj.android/
localhost:proj.android lili$ ls
AndroidManifest.xml build.xmllocal.propertiesres
adds2line.sh build_native.shndkgdb.shsrc
ant.properties genobj
assets jni proguard-project.txt
bin libs project.properties
localhost:proj.android lili$ ./adds2line.sh 001122cf
PurpleHouseLayer::littleRock()
/Applications/androidsoft/cocos2d-2.0-x-2.0.4/HallowmasTTT/proj.android/jni/../../Classes/Game/s198/PurpleHouseLayer.cpp:292
localhost:proj.android lili$
localhost:proj.android lili$
红色部分就是我代码错误地方。。在PurpleHouseLayer.cpp 292 行出错。。赶紧到xcode中把它修复吧 ^8^!
好吧就此结束。。
有的同学就不满意了。博主你妹的,坑同学我!你妹哪来的001122cf dogshit! fuck out!
这个才是关键之出
好吧 给你们看看 ,看下面的日志
10-17 11:10:54.257: I/DEBUG(12788): backtrace:
10-17 11:10:54.257: I/DEBUG(12788): #00 pc 001565a2 /data/data/com.koolearn.hallowmastTTT/lib/libgame.so (cocos2d::CCDictionary::objectForKey(std::string const&)+21)
10-17 11:10:54.257: I/DEBUG(12788): #01 pc 00156fc9 /data/data/com.koolearn.hallowmastTTT/lib/libgame.so (cocos2d::CCDictionary::valueForKey(std::string const&)+16)
10-17 11:10:54.257: I/DEBUG(12788): #02 pc 00188c15 /data/data/com.koolearn.hallowmastTTT/lib/libgame.so (cocos2d::CCParticleSystem::initWithDictionary(cocos2d::CCDictionary*)+80)
10-17 11:10:54.257: I/DEBUG(12788): #03 pc 00188b79 /data/data/com.koolearn.hallowmastTTT/lib/libgame.so (cocos2d::CCParticleSystem::initWithFile(char const*)+148)
10-17 11:10:54.257: I/DEBUG(12788): #04 pc 0018e66d /data/data/com.koolearn.hallowmastTTT/lib/libgame.so (cocos2d::CCParticleSystemQuad::create(char const*)+40)
10-17 11:10:54.257: I/DEBUG(12788): #05 pc 001122cf /data/data/com.koolearn.hallowmastTTT/lib/libgame.so (PurpleHouseLayer::littleRock()+34)
10-17 11:10:54.257: I/DEBUG(12788): #06 pc 001425cd /data/data/com.koolearn.hallowmastTTT/lib/libgame.so (cocos2d::CCCallFunc::execute()+80)
10-17 11:10:54.257: I/DEBUG(12788): #07 pc 00142575 /data/data/com.koolearn.hallowmastTTT/lib/libgame.so (cocos2d::CCCallFunc::update(float)+20)
10-17 11:10:54.257: I/DEBUG(12788): #08 pc 00143bc1 /data/data/com.koolearn.hallowmastTTT/lib/libgame.so (cocos2d::CCSequence::update(float)+452)
10-17 11:10:54.257: I/DEBUG(12788): #09 pc 00143399 /data/data/com.koolearn.hallowmastTTT/lib/libgame.so (cocos2d::CCActionInterval::step(float)+368)
10-17 11:10:54.257: I/DEBUG(12788): #10 pc 0014cd63 /data/data/com.koolearn.hallowmastTTT/lib/libgame.so (cocos2d::CCActionManager::update(float)+122)
10-17 11:10:54.257: I/DEBUG(12788): #11 pc 00136ae1 /data/data/com.koolearn.hallowmastTTT/lib/libgame.so (cocos2d::CCScheduler::update(float)+104)
10-17 11:10:54.257: I/DEBUG(12788): #12 pc 0015e5bb /data/data/com.koolearn.hallowmastTTT/lib/libgame.so (cocos2d::CCDirector::drawScene()+54)
10-17 11:10:54.257: I/DEBUG(12788): #13 pc 0015fb7b /data/data/com.koolearn.hallowmastTTT/lib/libgame.so (cocos2d::CCDisplayLinkDirector::mainLoop()+54)
10-17 11:10:54.265: I/DEBUG(12788): #14 pc 00198425 /data/data/com.koolearn.hallowmastTTT/lib/libgame.so (Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeRender+20)
10-17 11:10:54.265: I/DEBUG(12788): #15 pc 0001deb0 /system/lib/libdvm.so (dvmPlatformInvoke+112)
10-17 11:10:54.265: I/DEBUG(12788): #16 pc 0004d103 /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+394)
10-17 11:10:54.265: I/DEBUG(12788): #17 pc 00000214 /dev/ashmem/dalvik-jit-code-cache (deleted)
10-17 11:10:54.265: I/DEBUG(12788): stack:
在backtrace: 和stack:之间 的日志 只见 #xx pc + 地址 .so动态库 (具体空间::类名::函数名+行数)
最上面的#00是抛出的最底层,#17是抛出的最顶层,想必同学们也看到了红色那一行。是的!就是他了 pc 后面的 001122cf 。。 就 pc 后面的管用。其他地方的地址试了 没用。
看了两三遍红色那一行上面下面错误的地方。估计了一下出错原因
CCParticleSystemQuad::create 粒子系统创建
cocos2d::CCDictionary::valueForKey 字典找资源
估计是粒子系统没有找到某个粒子系统配置文件
代码中是这样的
CCParticleSystemQuad* fireParticle =CCParticleSystemQuad::create("winFlash.plist");
这个配置文件是 winFlash.plist
找到原因了。我的 Resource文件夹下没有这个配置文件。加上就解决了。
呵呵。。
总结:
用adds2line 就是找到你代码出错的地方,一般cocos2d-x库是不会有错的。大部分是自己代码有错误。寻找出错的地方时找到自己的类和函数,并且仔细查看上下错误的地方。估计错误的原因。一般这些问题都能非常快速锁定的。快速解决的。
谢谢同学们 阅读。