У меня есть некоторый код 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, я бы подумал.Кто-нибудь когда-нибудь сталкивался с чем-то подобным?