当我在我的本机库中执行throw命令时,我的Android应用程序崩溃了。 Android不支持这些电话吗?它永远不会到达捕获。
try
{
__android_log_print(ANDROID_LOG_ERROR, "nativeLib", "throw");
throw;
}
catch (...) {
__android_log_print(ANDROID_LOG_ERROR, "nativeLib", "catch");
}
我最近从gnustl_shared切换到c ++ _ shared,我不确定这是否与我的问题有关。
开发人员指南说gnustl_shared默认启用了异常,但c ++ _ shared却没有。我已经在指南中包含了-fexceptions标志。 https://developer.android.com/ndk/guides/cpp-support.html
答案 0 :(得分:1)
这是预期的行为。来自C ++标准:
如果当前没有处理异常,则执行不带操作数的throw-expression调用terminate()(15.5.1)。
如果你想抓住它,你需要扔东西:
git fetch
答案 1 :(得分:0)
看起来这是一个众所周知的问题:
https://developer.android.com/ndk/guides/cpp-support.html
兼容性
NDK的libc ++不稳定。并非所有测试都通过,测试套件并不全面。一些已知问题是:
•在抛出异常时,在ARM上使用c ++ _ shared会崩溃。
•对wchar_t和区域设置API的支持是有限的。
答案 2 :(得分:0)
此严重错误是否已在Android开发人员社区中确定为官方错误?如果没有,它应该。这确实是设计中的主要缺陷。灾难性的。