簡體   English   中英

Android - JNI 在設置本機 C++ 變量時崩潰

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM