各位大神,請教一個問題,我在AS下撰寫C的so庫,后來添加了一個依賴庫C++的so庫,因為呼叫關系,后來我這邊的檔案全部改成cpp格式,但是在呼叫函式時候,出現下面的錯誤,不定時,不定期,也不是具體的介面導致,也不知道哪里的問題,會使程式崩潰,出現如下錯誤,請教一個各位,知道的麻煩能不吝賜教
A/libc: /usr/local/google/buildbot/src/android/ndk-release-r19/external/libcxx/../../external/libcxxabi/src/abort_message.cpp:73: abort_message: assertion "terminating with uncaught exception of type std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >" failed
Fatal signal 6 (SIGABRT) at 0x000030b3 (code=-6), thread 12481 (Thread-261)
uj5u.com熱心網友回復:
JNI 中也有例外不過跟c++、java 中的例外不同。如果JNIEnv 的某些函式出錯了,會產生一個例外但是不會中斷本地函式的執行,直到從JNI 層回傳到java 層之后,虛擬機才會拋出例外。雖然不會中斷本地函式的執行,一旦產生例外后,就只能做一些資源清理的作業。如果這時呼叫除了產生例外函式以外的其他函式則會導致程式死掉!JNI層提供了三個函式來幫助截獲修改這些例外
1.ExceptionOccured -> 判斷是否發生例外
2.ExceptionClear -> 用來清理 JNI 層中發生的例外
3.ThrowNew 函式:用來像java 層拋出例外。
例外函式加下面的代碼,會有日志出來
if (env->ExceptionOccurred()) {
env->ExceptionDescribe(); // writes to logcat
env->ExceptionClear();
}
uj5u.com熱心網友回復:
謝謝你的回答,你這個列印不出來東西
因為我這邊是底層是呼叫C++撰寫的so庫,這個庫用來string這個資料型別,我平臺運行的時候依賴和呼叫的系統libc這個庫拋出例外了
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/156553.html
標籤:Android
上一篇:webview和h5混合開發攔截h5里所有非超鏈接(js,css),然后在鏈接后面添加一個引數token="",繼續訪問
