У меня есть код Java, который вызывает код C ++, а код C ++ поворачивается и вызывает Java, и все это через JNI. Мы получали пресловутый «hs_err_pidXXXX.log», который, как ни странно, происходил, когда мы вызывали JNIEnv _ :: GetMethodID (myJniEnv-> GetObjectClass (anException), «printStackTrace», «() V»)
о текущем ожидающем исключении! Итак, мы добавили:
if ((javaException = getJniEnv()->ExceptionOccurred()) != NULL)
{
jniEnv->ExceptionDescribe();
.... <other exception handling code> ...
}
... после каждого вызова JNI, чтобы попытаться выяснить, какое исключение произошло. Результат ExceptionDescribe () был:
Uncaught exception of type <unknown>
Как это происходит? Вышеупомянутое значение anException
было получено прямо из JNI-вызова anException = myJniEnv-> ExceptionOccurred ()
, что должно привести к выбросу, верно? Думаю, я смогу напечатать трассировку стека на throwable без сбоев JNI. Кто-нибудь раньше сталкивался с подобным?