增加google排行榜后,游戏通关时概率出现闪退

【关卡通关面板概率导致闪退】
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返回值一直没出问题,估计是狗屎运了
赶紧排查修改
【总结】
一些耗时很长的问题,一般都是些很小的问题引出的
代码中很早前是正确的做法,后面就不知不觉使用错误了。盯了半天没瞧出问题,半桶水害死人啊
这些小问题怎么去避免?好像没有很好的办法,只能把问题记录下来,以后不再在这上面犯错了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值