[英]Android - JNI crash on set Native C++ Variable
當我嘗試在 C++ 類中設置變量時,我有一些 JNI/C++ 代碼崩潰。
void AndroidReflectionViewer::NativeSetVrActive(JNIEnv* env, jboolean active) {
LOGW("This gets called fine");
other_obj_.set_vr_enabled(active);
LOGW("Code never gets to here");
}
反過來other_obj_
函數看起來像:
void set_vr_enabled(bool enabled) {
LOGW("Before bool set prints fine.");
what_eva = enabled;
LOGW("After never prints");
}
當我將other_obj_
的bool
設置為任何值(或真正更改該對象中的任何變量)時,它似乎會崩潰。 不過打印日志語句很好。 我也試過what_eva = true
,沒有區別。
? A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x123e in tid 12243
[ 01-19 09:18:54.062 457: 457 W/ ]
debuggerd: handling request: pid=12243 uid=10143 gid=10143 tid=12243
I/nanohub: osLog: [BMI160] gyrPower: on=1, state=3
I/nanohub: osLog: [BMI160] magPower: on=1, state=4
? W/debuggerd: type=1400 audit(0.0:1870): avc: denied { search } for name="com.foo" dev="sda35" ino=877326 scontext=u:r:debuggerd:s0 tcontext=u:object_r:app_data_file:s0:c512,c768 tclass=dir permissive=0
? W/debuggerd: type=1400 audit(0.0:1871): avc: denied { search } for name="com.foo" dev="sda35" ino=877326 scontext=u:r:debuggerd:s0 tcontext=u:object_r:app_data_file:s0:c512,c768 tclass=dir permissive=0
我閱讀了 avc: denied errors on Android source 。 雖然這些有助於調試錯誤的來源,但它並沒有就實際可能導致的原因提供很多建議。 所以對於實際問題:
什么可能導致此崩潰,我該如何解決?
有幾件事似乎可能導致此問題:
也許我沒有在正確的線程中。 我試過等待那個線程,但沒有用。
也許 jboolean 是一個問題? 轉換並僅設置what_eva = true
不起作用。
也許這是一種競爭條件,即在初始化 C++ 代碼之前運行 Java 代碼。
實際解決方案:
崩潰是由競爭條件引起的,我試圖在 C++ 初始化之前從 Java 調用 C++ 函數。 我在調用 C++ 之前延遲了幾毫秒,它可以工作。 這似乎不是超級強大,但在這種情況下,我計划無論如何都從用戶激活的按鈕調用它。 當我這樣做時,我不應該擔心比賽條件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.