如何在另一个 C 任务中调用 JNI 的 C 方法?
How to call a C mehod of JNI in another C task?
我实现了一个 JNI 方法来处理对象并返回一个值。
这个方法有点复杂,有很多JNI分配。
我想使用 GDB 调试我的 JNI 方法并使用 Valgrind 检查它的内存,但是使用 javam 这个任务听起来很复杂。
所以我的问题是,是否可以创建一个调用 JNI 函数的 C 函数,接近于 java 的调用方式?
像这个例子:
JNIEXPORT jint JNICALL Java_test_Test_func (JNIEnv *env, jobject obj, jstring jstr){
const char *p_str;
p_str = (*env)->GetStringUTFChars(env, jstr, 0);
return char[2];
}
int main(int argc, char **argv){
JNIEnv env;
jstring test = env->NewStringUTF(env, "vals");
printf("%d\n", Java_test_Test_func(&env, NULL, test));
//Expects: 108
return 0;
}
您需要先实际创建 VM,请参阅 Chapter 5 of the JNI documentation。
这将为您提供一个 jvm
,您可以从中获取一个 JNIEnv *env
并调用您的函数。
也就是说,您也可以正常启动您的 Java 进程,将调试器附加到它并在您的函数上放置一个断点,就像处理任何其他本机程序一样。
我实现了一个 JNI 方法来处理对象并返回一个值。
这个方法有点复杂,有很多JNI分配。
我想使用 GDB 调试我的 JNI 方法并使用 Valgrind 检查它的内存,但是使用 javam 这个任务听起来很复杂。
所以我的问题是,是否可以创建一个调用 JNI 函数的 C 函数,接近于 java 的调用方式?
像这个例子:
JNIEXPORT jint JNICALL Java_test_Test_func (JNIEnv *env, jobject obj, jstring jstr){
const char *p_str;
p_str = (*env)->GetStringUTFChars(env, jstr, 0);
return char[2];
}
int main(int argc, char **argv){
JNIEnv env;
jstring test = env->NewStringUTF(env, "vals");
printf("%d\n", Java_test_Test_func(&env, NULL, test));
//Expects: 108
return 0;
}
您需要先实际创建 VM,请参阅 Chapter 5 of the JNI documentation。
这将为您提供一个 jvm
,您可以从中获取一个 JNIEnv *env
并调用您的函数。
也就是说,您也可以正常启动您的 Java 进程,将调试器附加到它并在您的函数上放置一个断点,就像处理任何其他本机程序一样。