在Android本机库中尝试Catch失败

时间:2017-01-26 18:04:54

标签: android crash java-native-interface try-catch throw

当我在我的本机库中执行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

3 个答案:

答案 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开发人员社区中确定为官方错误?如果没有,它应该。这确实是设计中的主要缺陷。灾难性的。