【关卡通关面板概率导致闪退】
2015/01/06
耗时超过0.6天(间断性)
【描述】
在关卡面板增加了排行榜显示代码后,就会在原来没有问题的地方出现闪退
// 显示每日排名
int rank = SocialCtrl::googleRank();
ClientInterfaceAndroid::toast(CLDGetIntStr(rank));
if (rank > 0 && rank < 9999999)
{
显示排名信息
}
// 显示得分、历史得分
CCLabelTTF * labelScore = CCLabelTTF::create(CLDGetIntStr(m_param.score), CLD_DEFAULT_FONT, CLDFontSize(32), labelSize, kCCTextAlignmentLeft);
CCLabelTTF * labelHistoryScore = CCLabelTTF::create(CLDGetIntStr(m_param.historyScore), CLD_DEFAULT_FONT, CLDFontSize(32), labelSize, kCCTextAlignmentLeft);
部分栈信息:
01-06 17:57:09.165: I/DEBUG(11337): backtrace:
01-06 17:57:09.166: I/DEBUG(11337): #00 pc 00037ea4 /system/lib/libdvm.so
01-06 17:57:09.166: I/DEBUG(11337): #01 pc 0003818c /system/lib/libdvm.so
01-06 17:57:09.166: I/DEBUG(11337): #02 pc 00057a33 /system/lib/libdvm.so
01-06 17:57:09.166: I/DEBUG(11337): #03 pc 00057ca7 /system/lib/libdvm.so (dvmVisitRoots(void (*)(void*, unsigned int, RootType, void*), void*)+330)
01-06 17:57:09.166: I/DEBUG(11337): #04 pc 0002a17c /system/lib/libdvm.so (dvmCollectGarbageInternal(GcSpec const*)+228)
01-06 17:57:09.166: I/DEBUG(11337): #05 pc 0002a704 /system/lib/libdvm.so
01-06 17:57:09.166: I/DEBUG(11337): #06 pc 0002a980 /system/lib/libdvm.so (dvmMalloc(unsigned int, int)+180)
01-06 17:57:09.166: I/DEBUG(11337): #07 pc 0006a6b1 /system/lib/libdvm.so
01-06 17:57:09.166: I/DEBUG(11337): #08 pc 00022cb4 /system/lib/libdvm.so (dvmAsmSisterStart+500)
01-06 17:57:09.166: I/DEBUG(11337): #09 pc 0002bfe0 /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+180)
01-06 17:57:09.166: I/DEBUG(11337): #10 pc 00061f6f /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+282)
01-06 17:57:09.166: I/DEBUG(11337): #11 pc 0004aac9 /system/lib/libdvm.so
01-06 17:57:09.166: I/DEBUG(11337): #12 pc 001f3d21 /mnt/asec/com.konamobile.dessertdash-2/lib/libbubblebear.so (_JNIEnv::CallStaticVoidMethod(_jclass*, _jmethodID*, ...)+20)
01-06 17:57:09.166: I/DEBUG(11337): #13 pc 0028e2a9 /mnt/asec/com.konamobile.dessertdash-2/lib/libbubblebear.so (cocos2d::BitmapDC::getBitmapFromJavaShadowStroke(char const*, int, int, cocos2d::CCImage::ETextAlign, char const*, float, float, float, float, bool, float, float, float, float, bool, float, float, float, float)+296)
01-06 17:57:09.166: I/DEBUG(11337): #14 pc 0028e49b /mnt/asec/com.konamobile.dessertdash-2/lib/libbubblebear.so (cocos2d::CCImage::initWithStringShadowStroke(char const*, int, int, cocos2d::CCImage::ETextAlign, char const*, int, float, float, float, bool, float, float, float, float, bool, float, float, float, float)+122)
01-06 17:57:09.166: I/DEBUG(11337): #15 pc 002a07f5 /mnt/asec/com.konamobile.dessertdash-2/lib/libbubblebear.so (cocos2d::CCTexture2D::initWithString(char const*, cocos2d::_ccFontDefinition*)+300)
01-06 17:57:09.167: I/DEBUG(11337): #16 pc 0027828d /mnt/asec/com.konamobile.dessertdash-2/lib/libbubblebear.so (cocos2d::CCLabelTTF::updateTexture()+44)
01-06 17:57:09.167: I/DEBUG(11337): #17 pc 00278705 /mnt/asec/com.konamobile.dessertdash-2/lib/libbubblebear.so (cocos2d::CCLabelTTF::setString(char const*)+40)
01-06 17:57:09.167: I/DEBUG(11337): #18 pc 00277ea5 /mnt/asec/com.konamobile.dessertdash-2/lib/libbubblebear.so (cocos2d::CCLabelTTF::initWithString(char const*, char const*, float, cocos2d::CCSize const&, cocos2d::CCTextAlignment, cocos2d::CCVerticalTextAlignment)+136)
01-06 17:57:09.167: I/DEBUG(11337): #19 pc 00277f41 /mnt/asec/com.konamobile.dessertdash-2/lib/libbubblebear.so (cocos2d::CCLabelTTF::create(char const*, char const*, float, cocos2d::CCSize const&, cocos2d::CCTextAlignment, cocos2d::CCVerticalTextAlignment)+52)
01-06 17:57:09.167: I/DEBUG(11337): #20 pc 00277f71 /mnt/asec/com.konamobile.dessertdash-2/lib/libbubblebear.so (cocos2d::CCLabelTTF::create(char const*, char const*, float, cocos2d::CCSize const&, cocos2d::CCTextAlignment)+12)
01-06 17:57:09.167: I/DEBUG(11337): #21 pc 00209199 /mnt/asec/com.konamobile.dessertdash-2/lib/libbubblebear.so (UILevelPass::showBoardInfo()+348)
01-06 17:57:09.167: I/DEBUG(11337): #22 pc 0020a23f /mnt/asec/com.konamobile.dessertdash-2/lib/libbubblebear.so (UILevelPass::initBoard()+190)
01-06 17:57:09.167: I/DEBUG(11337): #23 pc 00208ea7 /mnt/asec/com.konamobile.dessertdash-2/lib/libbubblebear.so (UILevelBoardComm::init()+134)
01-06 17:57:09.167: I/DEBUG(11337): #24 pc 0020a715 /mnt/asec/com.konamobile.dessertdash-2/lib/libbubblebear.so (UILevelPass::init(UILevelPassParam&)+36)
01-06 17:57:09.167: I/DEBUG(11337): #25 pc 0022177d /mnt/asec/com.konamobile.dessertdash-2/lib/libbubblebear.so (UILevelPass::create(UILevelPassParam)+84)
【尝试一】
为了增加问题出现频率,每次弹出10个面板。问题基本是必现了
【尝试二】
通过代码排除法,可以将问题确定为jni调用问题导致的。不过新的疑问又出现了
从java代码的打印来看,返回值是100,不过从调用结果看,该值就是随机出现的了
public static int googleRank() {
int rank = sGoogleInterface.rank();
CldComm.toast("rank: " + rank);
return rank;
}
public int rank() {
return 100;
//if (mIsScoreDisable) return -1;
//if (!isSignedIn()) {
// return -1;
//}
//return mRank;
}
int SocialCtrl::googleRank()
{
cocos2d::JniMethodInfo t;
if (cocos2d::JniHelper::getStaticMethodInfo(t
, GIJavaClassName
, "googleRank"
, "()I"))
{
jint ret = (jint)(t.env->CallStaticObjectMethod(t.classID, t.methodID));
t.env->DeleteLocalRef(t.classID);
return ret;
}
}
【尝试三】
可能是java生成class文件部分没有更新导致,clean了一下工程后rebuild,结果还是那样
【尝试四】
对比以前JNI调用,没发现什么不同,只是以前的就没问题
在网上查找JNI调用出错相关问题,突然觉得CallStaticObjectMethod有点问题,网上有人使用IntMethod
可能是类型不对。把CallStaticObjectMethod替换为CallStaticIntMethod试一下
问题就这样解决了,一切都正常了
以前用CallStaticObjectMethod处理int返回值一直没出问题,估计是狗屎运了
赶紧排查修改
【总结】
一些耗时很长的问题,一般都是些很小的问题引出的
代码中很早前是正确的做法,后面就不知不觉使用错误了。盯了半天没瞧出问题,半桶水害死人啊
这些小问题怎么去避免?好像没有很好的办法,只能把问题记录下来,以后不再在这上面犯错了
2015/01/06
耗时超过0.6天(间断性)
【描述】
在关卡面板增加了排行榜显示代码后,就会在原来没有问题的地方出现闪退
// 显示每日排名
int rank = SocialCtrl::googleRank();
ClientInterfaceAndroid::toast(CLDGetIntStr(rank));
if (rank > 0 && rank < 9999999)
{
显示排名信息
}
// 显示得分、历史得分
CCLabelTTF * labelScore = CCLabelTTF::create(CLDGetIntStr(m_param.score), CLD_DEFAULT_FONT, CLDFontSize(32), labelSize, kCCTextAlignmentLeft);
CCLabelTTF * labelHistoryScore = CCLabelTTF::create(CLDGetIntStr(m_param.historyScore), CLD_DEFAULT_FONT, CLDFontSize(32), labelSize, kCCTextAlignmentLeft);
部分栈信息:
01-06 17:57:09.165: I/DEBUG(11337): backtrace:
01-06 17:57:09.166: I/DEBUG(11337): #00 pc 00037ea4 /system/lib/libdvm.so
01-06 17:57:09.166: I/DEBUG(11337): #01 pc 0003818c /system/lib/libdvm.so
01-06 17:57:09.166: I/DEBUG(11337): #02 pc 00057a33 /system/lib/libdvm.so
01-06 17:57:09.166: I/DEBUG(11337): #03 pc 00057ca7 /system/lib/libdvm.so (dvmVisitRoots(void (*)(void*, unsigned int, RootType, void*), void*)+330)
01-06 17:57:09.166: I/DEBUG(11337): #04 pc 0002a17c /system/lib/libdvm.so (dvmCollectGarbageInternal(GcSpec const*)+228)
01-06 17:57:09.166: I/DEBUG(11337): #05 pc 0002a704 /system/lib/libdvm.so
01-06 17:57:09.166: I/DEBUG(11337): #06 pc 0002a980 /system/lib/libdvm.so (dvmMalloc(unsigned int, int)+180)
01-06 17:57:09.166: I/DEBUG(11337): #07 pc 0006a6b1 /system/lib/libdvm.so
01-06 17:57:09.166: I/DEBUG(11337): #08 pc 00022cb4 /system/lib/libdvm.so (dvmAsmSisterStart+500)
01-06 17:57:09.166: I/DEBUG(11337): #09 pc 0002bfe0 /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+180)
01-06 17:57:09.166: I/DEBUG(11337): #10 pc 00061f6f /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+282)
01-06 17:57:09.166: I/DEBUG(11337): #11 pc 0004aac9 /system/lib/libdvm.so
01-06 17:57:09.166: I/DEBUG(11337): #12 pc 001f3d21 /mnt/asec/com.konamobile.dessertdash-2/lib/libbubblebear.so (_JNIEnv::CallStaticVoidMethod(_jclass*, _jmethodID*, ...)+20)
01-06 17:57:09.166: I/DEBUG(11337): #13 pc 0028e2a9 /mnt/asec/com.konamobile.dessertdash-2/lib/libbubblebear.so (cocos2d::BitmapDC::getBitmapFromJavaShadowStroke(char const*, int, int, cocos2d::CCImage::ETextAlign, char const*, float, float, float, float, bool, float, float, float, float, bool, float, float, float, float)+296)
01-06 17:57:09.166: I/DEBUG(11337): #14 pc 0028e49b /mnt/asec/com.konamobile.dessertdash-2/lib/libbubblebear.so (cocos2d::CCImage::initWithStringShadowStroke(char const*, int, int, cocos2d::CCImage::ETextAlign, char const*, int, float, float, float, bool, float, float, float, float, bool, float, float, float, float)+122)
01-06 17:57:09.166: I/DEBUG(11337): #15 pc 002a07f5 /mnt/asec/com.konamobile.dessertdash-2/lib/libbubblebear.so (cocos2d::CCTexture2D::initWithString(char const*, cocos2d::_ccFontDefinition*)+300)
01-06 17:57:09.167: I/DEBUG(11337): #16 pc 0027828d /mnt/asec/com.konamobile.dessertdash-2/lib/libbubblebear.so (cocos2d::CCLabelTTF::updateTexture()+44)
01-06 17:57:09.167: I/DEBUG(11337): #17 pc 00278705 /mnt/asec/com.konamobile.dessertdash-2/lib/libbubblebear.so (cocos2d::CCLabelTTF::setString(char const*)+40)
01-06 17:57:09.167: I/DEBUG(11337): #18 pc 00277ea5 /mnt/asec/com.konamobile.dessertdash-2/lib/libbubblebear.so (cocos2d::CCLabelTTF::initWithString(char const*, char const*, float, cocos2d::CCSize const&, cocos2d::CCTextAlignment, cocos2d::CCVerticalTextAlignment)+136)
01-06 17:57:09.167: I/DEBUG(11337): #19 pc 00277f41 /mnt/asec/com.konamobile.dessertdash-2/lib/libbubblebear.so (cocos2d::CCLabelTTF::create(char const*, char const*, float, cocos2d::CCSize const&, cocos2d::CCTextAlignment, cocos2d::CCVerticalTextAlignment)+52)
01-06 17:57:09.167: I/DEBUG(11337): #20 pc 00277f71 /mnt/asec/com.konamobile.dessertdash-2/lib/libbubblebear.so (cocos2d::CCLabelTTF::create(char const*, char const*, float, cocos2d::CCSize const&, cocos2d::CCTextAlignment)+12)
01-06 17:57:09.167: I/DEBUG(11337): #21 pc 00209199 /mnt/asec/com.konamobile.dessertdash-2/lib/libbubblebear.so (UILevelPass::showBoardInfo()+348)
01-06 17:57:09.167: I/DEBUG(11337): #22 pc 0020a23f /mnt/asec/com.konamobile.dessertdash-2/lib/libbubblebear.so (UILevelPass::initBoard()+190)
01-06 17:57:09.167: I/DEBUG(11337): #23 pc 00208ea7 /mnt/asec/com.konamobile.dessertdash-2/lib/libbubblebear.so (UILevelBoardComm::init()+134)
01-06 17:57:09.167: I/DEBUG(11337): #24 pc 0020a715 /mnt/asec/com.konamobile.dessertdash-2/lib/libbubblebear.so (UILevelPass::init(UILevelPassParam&)+36)
01-06 17:57:09.167: I/DEBUG(11337): #25 pc 0022177d /mnt/asec/com.konamobile.dessertdash-2/lib/libbubblebear.so (UILevelPass::create(UILevelPassParam)+84)
【尝试一】
为了增加问题出现频率,每次弹出10个面板。问题基本是必现了
【尝试二】
通过代码排除法,可以将问题确定为jni调用问题导致的。不过新的疑问又出现了
从java代码的打印来看,返回值是100,不过从调用结果看,该值就是随机出现的了
public static int googleRank() {
int rank = sGoogleInterface.rank();
CldComm.toast("rank: " + rank);
return rank;
}
public int rank() {
return 100;
//if (mIsScoreDisable) return -1;
//if (!isSignedIn()) {
// return -1;
//}
//return mRank;
}
int SocialCtrl::googleRank()
{
cocos2d::JniMethodInfo t;
if (cocos2d::JniHelper::getStaticMethodInfo(t
, GIJavaClassName
, "googleRank"
, "()I"))
{
jint ret = (jint)(t.env->CallStaticObjectMethod(t.classID, t.methodID));
t.env->DeleteLocalRef(t.classID);
return ret;
}
}
【尝试三】
可能是java生成class文件部分没有更新导致,clean了一下工程后rebuild,结果还是那样
【尝试四】
对比以前JNI调用,没发现什么不同,只是以前的就没问题
在网上查找JNI调用出错相关问题,突然觉得CallStaticObjectMethod有点问题,网上有人使用IntMethod
可能是类型不对。把CallStaticObjectMethod替换为CallStaticIntMethod试一下
问题就这样解决了,一切都正常了
以前用CallStaticObjectMethod处理int返回值一直没出问题,估计是狗屎运了
赶紧排查修改
【总结】
一些耗时很长的问题,一般都是些很小的问题引出的
代码中很早前是正确的做法,后面就不知不觉使用错误了。盯了半天没瞧出问题,半桶水害死人啊
这些小问题怎么去避免?好像没有很好的办法,只能把问题记录下来,以后不再在这上面犯错了