Для реальной проблемы невозможности правильно отладить программу, использующую JNI (или ошибка не появляется при запуске ее в отладчике):
В этом случае часто помогает добавить обертки Java вокруг ваших вызовов JNI (т. Е. Все нативные методы являются закрытыми, а ваши открытые методы в классе вызывают их), которые выполняют некоторую базовую проверку работоспособности (проверяют, что все «объекты» освобождены и «объекты» не используются после освобождения) или синхронизации (просто синхронизируйте все методы из одной DLL в один экземпляр объекта). Пусть методы java-оболочки регистрируют ошибку и выдают исключение.
Это часто помогает найти реальную ошибку (что удивительно, в основном в коде Java, который не подчиняется семантике вызываемых функций, вызывающих некоторые неприятные двойные освобождения или аналогичные) легче, чем попытка отладки массивно параллельной Java программа в родном отладчике ...
Если вы знаете причину, сохраните код в методах-обертках, чтобы избежать его. Лучше, чтобы ваши методы-оболочки генерировали исключения, чем ваш код JNI, приводящий к сбою виртуальной машины ...