我正在尝试调试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);
}