繁体   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