如何调试dalvikvm拒绝操作码?

时间:2013-01-07 06:00:10

标签: android dalvik

如何理解这些错误?这是所有与错误相关的log cat。所有其他都是GC类型的消息。

01-07 19:14:08.536: W/dalvikvm(5780): VFY: register2 v4-5 values 6,24
01-07 19:14:08.536: W/dalvikvm(5780): VFY:  rejecting opcode 0xce at 0x004a
01-07 19:14:08.536: W/dalvikvm(5780): VFY:  rejected Lnz/co/great_ape/headsup/sat_track/SGP4unit_sgp4;.sgp4 (Lnz/co/great_ape/headsup/sat_track/SGP4SatData;D[D[D)Z
01-07 19:14:08.536: W/dalvikvm(5780): Verifier rejected class Lnz/co/great_ape/headsup/sat_track/SGP4unit_sgp4;

我知道代码,大约有400行sgp4 satellite tracking software(不是我的代码)。

当我创建这个类的实例(它长400多行)时会触发问题,我通过简单地注释掉所有代码然后取消注释部分直到错误来跟踪这段代码的问题返回时,

这里的所有变量都是双倍的。那么为什么android拒绝这个带有操作码的代码,例如OP_DIV_DOUBLE和OP_DIV_DOUBLE_2ADDR

无论如何,这是代码部分。

            /* -------------- update for short period periodics ------------ */
            if(satrec.method == 'd')
            {
                cosisq = cosip * cosip;
                satrec.con41 = 3.0 * cosisq - 1.0;
                satrec.x1mth2 = 1.0 - cosisq;
                satrec.x7thm1 = 7.0 * cosisq - 1.0;
            }
            mrt = rl * (1.0 - 1.5 * temp2 * betal * satrec.con41) +
                    0.5 * temp1 * satrec.x1mth2 * cos2u;
            su = su - 0.25 * temp2 * satrec.x7thm1 * sin2u;
            xnode = nodep + 1.5 * temp2 * cosip * sin2u;
            xinc = xincp + 1.5 * temp2 * cosip * sinip * cos2u;
            mvt = rdotl - nm * temp1 * satrec.x1mth2 * sin2u / xke;
            rvdot = rvdotl + nm * temp1 * (satrec.x1mth2 * cos2u +
                    1.5 * satrec.con41) / xke;

1 个答案:

答案 0 :(得分:0)

确定。似乎代码本身没有任何问题,只是方法的长度和变量的数量。在方法之外声明它们解决了这个问题。

您可以在此处获取更多信息:

https://groups.google.com/forum/?fromgroups=#!topic/android-developers/lxiTkNzOvZY