我正在尝试调试JNI函数,在此过程中,我希望显示jstring的传入logcat参数以验证其正确性。

我已经尝试使用以下代码来执行此操作,但是它一直崩溃。

LOGD(myStringArg);


其中myStringArg被声明为jstring

如果在我的jstring函数中声明并定义了另一个JNI,并且LOGD起作用了。但是,由于某种原因,如果我在LOGD函数参数上调用JNI,它将崩溃。我已经在内部验证了jstring不为null,并且在Java函数中调用它之前,我还检查了该值是否正确。

我已经将jstring转换为const char *,如下所示:

const char *charString;
charString = (const char*)(*env)->GetStringUTFChars(env, myStringArg, NULL);
LOGD(charString);


什么都没有显示,这意味着charString为空?

任何想法如何做到这一点?

谢谢。

最佳答案

您可以尝试使用以下方法从jstring中提取字符:

const char* getCharFromString(JNIEnv* env, jstring string){
    if(string == NULL)
        return NULL;

    return  env->GetStringUTFChars(string ,0);
}


这样,您可以将jstring打印为(const char*)

LOGD(getCharFromString(env, myStringArg));


如果您仍然无法打印此字符串,请尝试使用以下方法调试内容:

int getBytesNeededByString(JNIEnv* env, jstring string){
    return env->GetStringUTFLength(string);
}

int getNumberOfCharsInString(JNIEnv* env, jstring string){
    return env->GetStringLength(string);
}

10-05 22:23