この原因は何ですか?A/libc: Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1), thread 19239 (IntentService[K)
間欠的クラッシュ?ネイティブコードがクラッシュするとクラッシュする
C++コードがクラッシュを引き起こしているようです。例外はJavaの土地から捕まえることはできません。クラッシュはAndroid 4.4.4で間欠的に発生します。私はAndroid 6.0でそれを観察していません。
ネイティブの入口/出口ポイントのコード:
JNIEXPORT jstring
JNICALL Java_com_company_product_ClassJNI_foo(JNIEnv* env, jobject obj, jstring options)
{
const jsize optionLength = env->GetStringUTFLength(options);
std::vector <char> optionsBuffer(static_cast<int>(optionLength));
env->GetStringUTFRegion(options, 0, optionLength, optionsBuffer.data());
const std::string nativeOptions(optionsBuffer.cbegin(), optionsBuffer.cend());
try
{
SerialWrapper si(env, obj);
const std::string result = Procedure::exec(nativeOptions, si);
// gets this far
return env->NewStringUTF(result.c_str());
}
catch (const JObjectError& e)
{
const JSON jsonError{{PROP_ERROR, std::string(e.what())}};
return env->NewStringUTF(jsonError.dump().c_str());
}
}
私は、一見関連の記事を読みましたが、リソースにアクセスする複数のスレッドを議論し、私はここでの問題であることを信じていません。
は、あなたのリターンコールは 'catch'ブロックには本当にですか?例外がない場合、あなたの関数は何を返しますか?それはクラッシュを引き起こす可能性が高いです。 –