如何在JNI中发现错误
How to find errors in JNI
更新我们软件中的一些遗留代码,我不得不通过JNI更改一些调用。然而,在运行它几次之后,程序始终在c++中的相同位置中断并出现访问冲突错误,这转移回Java,其中变量已被设置为null,这不会在Java中发生(没有办法将该变量设置为null而不清理包含它的类),并且它中断的jni调用不会触及这部分代码。
每个JNI调用返回后检查异常,我的代码现在充满了assert(*someitem* != NULL);
在检索每个jclass和methodID并实例化新的java类之后,它们都没有失败,因此我只能假设错误发生在本机代码中的某个地方,并且只有在返回java时才会被捡起。
我的问题是,我怎样才能找到问题实际发生的地方?我使用了-xCheck:jni,没有显示任何东西,-verbose:jni和-verbose:gc,但都无济于事。
很抱歉,由于问题的性质,无法使用SSCCE
对于任何发现这篇文章并有同样问题的人,我终于修复了它。
结果是我在调用中使用了错误的方法。我重用了一个保存我的methodid的变量,在有问题的时候,它保存了一个对我调用它的对象有效的构造函数方法,这不会导致错误或异常,但是程序的关键部分被遗漏了。
希望这篇文章能帮助到那些有这个可怕问题的人。
相关文章:
- 请发现它在 dev 中工作的错误,但在 hackerrank 中不起作用
- Nanoflann发现邻居提出段错误
- 在使用另一个类"friend"函数时无法发现错误C++
- 无法发现嵌套的循环错误
- 关于Visual Studio 2017中未发现错误的精致询问
- 如何在 clang 消毒器发现错误时终止 clang 检测程序
- 循环素数,帮助发现错误,C++
- CMake发现错误的gcc版本
- 任何人都可以在此程序中发现错误(在 2 个通用堆栈中查找相同元素的数量)
- Irrlicht Collada 加载程序警告:发现错误的标记用法:库控制器
- 电话簿项目错误.在编译器中并没有发现错误,但当它运行很长时间后就会退出
- CLion中的allegro5项目没有发现错误
- /dev/dsp在centOS 6.x中播放音频时没有发现错误
- std::调用没有匹配的重载函数在VS 2015中发现错误
- LLVM错误:发现错误的函数,编译中止!后removeFromParent()
- 在OS X上链接clang++会产生很多符号未发现错误
- memcpy.Asm未发现错误
- 使用CMakeLists.txt设置Qt5 -文件未发现错误
- 在用qt和opengl编译c++项目时,标识符未发现错误
- 如何在JNI中发现错误