Java 如何在JNI中查找错误
更新软件中的一些遗留代码,我不得不通过JNI修改一些调用。但是,在运行它后,程序在C++中同一个地方总是在访问错误中中断,这会返回到java,其中变量已经设置为null,这在java中是不可能发生的(没有办法在不清除包含它的类的情况下设置这个变量null)。中断的jni调用不涉及这部分代码 每次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类之后,它们都没有失败,因此我只能假设错误发生
assert(*someitem*!=NULL)代码>
在检索每个jclass和methodID并实例化新的java类之后,它们都没有失败,因此我只能假设错误发生在本机代码中的某个地方,并且只有在返回java时才会发现
我的问题是,我如何才能找到问题实际发生的地方?
正如一个类似的问题所建议的那样,我使用了-xCheck:jni,它什么也没有显示,-verbose:jni和-verbose:gc,但没有用
很抱歉,由于问题的性质,任何找到此帖子并有相同问题的人都不可能使用SSCCE,我终于解决了它
事实证明,我在一次调用中使用了错误的methodID。我重用了一个保存MethodID的变量,当时它保存了一个对我调用它的对象有效的构造函数方法,这不会导致错误或异常,但是程序的一个关键部分丢失了
希望这能帮助其他人,如果他们有这个可怕的问题