Как вызвать C-метод JNI в другой C-задаче? - PullRequest
0 голосов
/ 06 декабря 2018

Я реализовал метод JNI для обработки объекта и возврата значения.

Этот метод немного сложен и имеет много распределений JNI.

Я хочу отладить свойМетод JNI, использующий GDB и проверяющий его память с помощью Valgrind, но использующий javam, эта задача звучит сложно.

Итак, мой вопрос, возможно ли создать функцию C, которая будет вызывать функцию JNI, близкую к тому, как вызовет 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;
}

1 Ответ

0 голосов
/ 06 декабря 2018

Сначала вам нужно будет создать виртуальную машину, см. Глава 5 документации JNI .Это даст вам jvm, из которого вы можете получить JNIEnv *env и вызвать вашу функцию.

Тем не менее, вы также можете просто запустить Java-процесс обычным образом, подключить к нему отладчик и установить точку останова.на вашей функции, как с любой другой нативной программой.

...