Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在JNI中查找错误_Java_C++_Java Native Interface_Memory Corruption - Fatal编程技术网

Java 如何在JNI中查找错误

Java 如何在JNI中查找错误,java,c++,java-native-interface,memory-corruption,Java,C++,Java Native Interface,Memory Corruption,更新软件中的一些遗留代码,我不得不通过JNI修改一些调用。但是,在运行它后,程序在C++中同一个地方总是在访问错误中中断,这会返回到java,其中变量已经设置为null,这在java中是不可能发生的(没有办法在不清除包含它的类的情况下设置这个变量null)。中断的jni调用不涉及这部分代码 每次JNI调用返回后都会检查异常,我的代码现在充满了assert(*someitem*!=NULL) 在检索每个jclass和methodID并实例化新的java类之后,它们都没有失败,因此我只能假设错误发生

更新软件中的一些遗留代码,我不得不通过JNI修改一些调用。但是,在运行它后,程序在C++中同一个地方总是在访问错误中中断,这会返回到java,其中变量已经设置为null,这在java中是不可能发生的(没有办法在不清除包含它的类的情况下设置这个变量null)。中断的jni调用不涉及这部分代码

每次JNI调用返回后都会检查异常,我的代码现在充满了
assert(*someitem*!=NULL)
在检索每个jclass和methodID并实例化新的java类之后,它们都没有失败,因此我只能假设错误发生在本机代码中的某个地方,并且只有在返回java时才会发现

我的问题是,我如何才能找到问题实际发生的地方? 正如一个类似的问题所建议的那样,我使用了-xCheck:jni,它什么也没有显示,-verbose:jni和-verbose:gc,但没有用


很抱歉,由于问题的性质,任何找到此帖子并有相同问题的人都不可能使用SSCCE,我终于解决了它

事实证明,我在一次调用中使用了错误的methodID。我重用了一个保存MethodID的变量,当时它保存了一个对我调用它的对象有效的构造函数方法,这不会导致错误或异常,但是程序的一个关键部分丢失了

希望这能帮助其他人,如果他们有这个可怕的问题