2017-01-26 43 views
0

當我在我的本機庫中執行throw命令時,我的Android應用程序崩潰。 Android不支持這些調用嗎?它從來沒有達到捕捉。嘗試在Android本機庫失敗

try 
{ 
    __android_log_print(ANDROID_LOG_ERROR, "nativeLib", "throw"); 
    throw; 
} 
catch (...) { 
    __android_log_print(ANDROID_LOG_ERROR, "nativeLib", "catch"); 
} 

我最近從gnustl_shared切換到C++ _共享,我不知道這有什麼與我的問題。

開發人員指南指出gnustl_shared默認情況下啓用了異常,但是C++ _ shared沒有。我已經包含了指南中描述的-fexceptions標誌。 https://developer.android.com/ndk/guides/cpp-support.html

+1

可能的重複[爲什麼拋「沒有」導致程序終止?)(http://stackoverflow.com/questions/651154/why-does-throw-nothing-causes-program-termination) –

+0

我回滾了你的編輯,因爲它從根本上改變了問題的意義和當前的答案 – njzk2

回答

0

它看起來這是一個已知的問題:

https://developer.android.com/ndk/guides/cpp-support.html

兼容性

的NDK的libC++不穩定。並非所有的測試都通過了,測試套件並不全面。一些已知問題如下:

•在引發異常時,使用ARM上的C++ _共享可能會崩潰。

•對wchar_t和語言環境API的支持有限。

1

這是預期的行爲。從C++標準:

如果當前沒有異常處理,執行沒有操作數的throw-expression將調用terminate()(15.5.1)。

如果你想讓它抓住你需要扔東西:

try 
{ 
    __android_log_print(ANDROID_LOG_ERROR, "nativeLib", "throw"); 
    throw new std::exception(); 
} 
catch (...) { 
    __android_log_print(ANDROID_LOG_ERROR, "nativeLib", "catch"); 
    env->ExceptionCheck(); 
} 
+0

該應用程序仍然崩潰,增加了新的std :: exception(); –

+0

你可以添加堆棧的問題? –

+0

堆棧包含我無法發佈的信息。但我得到A/libc:致命信號6(SIGABRT) –