2017-01-19 5 views
-2

C++クラスで変数を設定しようとするとクラッシュするJNI/C++コードがあります。私が任意の値にother_obj_boolを設定したときにクラッシュ(または実際にそのオブジェクト内のすべての変数を変更する)ように見えるAndroid - JNIクラッシュオンセットネイティブC++変数

void set_vr_enabled(bool enabled) { 
    LOGW("Before bool set prints fine."); 
    what_eva = enabled; 
    LOGW("After never prints"); 
} 

:よう

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_機能が見えます。ログ・ステートメントを印刷するのは問題ありません。私も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 

Android sourceのavc:deniedエラーについて読んでいます。これらはエラーがどこから来たのかをデバッグするのに役立ちますが、実際に何が起こっているのかについては多くの示唆を与えません。したがって、実際の質問の場合:

このクラッシュを引き起こす原因は何か、どうすれば修正できますか?

答えて

-1

物事のカップルは、彼らがこの問題を引き起こしている可能性がありますように見えた:

  • は、たぶん私は右のスレッドではありませんでした。私はそのスレッド を待って、それは動作しませんでした。

  • 多分、jbooleanが問題でしたか?変換するだけで what_eva = trueが動作しませんでした。

  • おそらく、Javaコードが で、C++コードが初期化される前に実行されている競合状態である可能性があります。

実際のソリューション:

クラッシュが、私はC++が初期化される前に、JavaからC++の関数を呼び出すようにしようとした競合状態によって引き起こされました。私はC++を呼び出す前に数ミリ秒遅らせて動作します。これは非常に頑丈なようではありませんが、このケースでは私はユーザーのアクティブなボタンから呼び出すことを計画しています。私がそれをするとき、私は競争状態を心配する必要はありません。

+0

これは私が同僚からこの問題に遭遇した3つの解決策であるため、これを回答として挙げました。それらのうちの1人だけが実際に働いていました、そして、私はそれを他の人たちからしっかりと分離しました。しかし、それらはすべて妥当な解決策のように思えますが、同様の問題を抱えている誰かが使用できる可能性があります。 – hubatish