0

JNI无异常导致错误

似乎发生在几个不同的领域,但通常在这段代码中:

void /*__stdcall*/ OutgoingCallbackHandler(int device_id, unsigned char* buffer, int size)
    {
        LockTools();

        JNIEnv* env = ::GetJNIEnvForCurrentThread();

        if (env == NULL)
        {
            LOGF("Environment couldn't be found for callback thread!");
            return;
        }

        for (int scan = 0; scan < callbacks.size(); ++scan)
        {
            if (callbacks[scan].type == CallbackInfo::OUTGOING)
            {
                jbyteArray jba = NULL;
                if (size <= 0)
                {
                    // we don't want to create a byte array if
                    // we have no data to represent.
                }
                else
                {


                    jba = env->NewByteArray(size); //THIS IS WHERE CRASH HAPPENS


                    env->SetByteArrayRegion(jba, 0, size, (const jbyte*)buffer);
                }

                env->CallVoidMethod(callbacks[scan].object, callbacks[scan].callback, device_id, jba);
                env->DeleteLocalRef(jba);
            }
        }

        UnlockTools();
    }

我们检查了 env 仍然指向一个有效的内存位置,传入的大小在规范内

这在被调用几次后开始发生

有没有更好的方法来调试 JNI 问题?

我们还在似乎引发错误的行的正上方检查了 JNI 特定异常

4

0 回答 0