私は、約5分間の集中的な使用の後、私のアプリがクラッシュしているという報告をいくつかのユーザーから受け取りました。私はGoogle Playでクラッシュログを受け取りました。その一例が下に添付されています。メッセージがあるように思わ:Xamarin Android弱参照テーブルオーバーフローの原因を診断するにはどうすればよいですか?
JNIエラー(アプリのバグ):弱グローバル参照テーブルのオーバーフロー(最大= 51200)」
私はJNIに慣れていないよので、何かアドバイス/説明をいただければ幸いです/これを理解する方法の提案。考えられる原因は、コード内の何かがクリーンアップされていないことですが、何ですか?この問題は、上で報告されてい
デバイスは、ネクサス5.xの、ギャラクシーS7とネクサス6です。
関連コードは私のオープンソースプロジェクト:https://gitlab.com/hodgskin-callan/Inventionにあります。ただし、問題を再現するための最小限のコードはなく、Nexus 9では再現されません。この問題がAndroidユーザーの大部分に影響を与えていないと思われます。
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'google/bullhead/bullhead:7.1.1/N4F26T/3687331:user/release-keys'
Revision: 'rev_1.0'
ABI: 'arm'
pid: 10404, tid: 10404, name: .x10host.pathos >>> com.x10host.pathos <<<
signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
Abort message: 'art/runtime/indirect_reference_table.cc:132] JNI ERROR (app bug): weak global reference table overflow (max=51200)'
r0 00000000 r1 000028a4 r2 00000006 r3 00000008
r4 f300558c r5 00000006 r6 f3005534 r7 0000010c
r8 00000000 r9 0000000a sl 00001785 fp f0385400
ip 0000000b sp ffde7b50 lr f1a065e7 pc f1a08e44 cpsr 200f0010
backtrace:
#00 pc 00049e44 /system/lib/libc.so (tgkill+12)
#01 pc 000475e3 /system/lib/libc.so (pthread_kill+34)
#02 pc 0001d8a5 /system/lib/libc.so (raise+10)
#03 pc 000193f1 /system/lib/libc.so (__libc_android_abort+34)
#04 pc 00017034 /system/lib/libc.so (abort+4)
#05 pc 0031a5f1 /system/lib/libart.so (_ZN3art7Runtime5AbortEPKc+328)
#06 pc 000b5205 /system/lib/libart.so (_ZN3art10LogMessageD2Ev+1132)
#07 pc 001bc42b /system/lib/libart.so (_ZN3art22IndirectReferenceTable3AddEjPNS_6mirror6ObjectE+194)
#08 pc 0023a097 /system/lib/libart.so (_ZN3art9JavaVMExt16AddWeakGlobalRefEPNS_6ThreadEPNS_6mirror6ObjectE+46)
#09 pc 0027f483 /system/lib/libart.so (_ZN3art3JNI16NewWeakGlobalRefEP7_JNIEnvP8_jobject+418)
#10 pc 0000de14 /data/app/com.x10host.pathos-2/lib/arm/libmonodroid.soapp/com.x10host.pathos-2/lib/arm/libmonodroid.so
あなたがこれを追跡するために有効にすることができGREFログのドキュメントの全体部分があります:https://developer.xamarin.com/guides/android/troubleshooting/troubleshooting/#Global_Reference_Messages –
おかげで、私はこの記事を読んで、有効にしていますロギングそれはgwrefc 0、ほとんどすべての時間を言う。私はそれが時間が経つにつれて成長するのを期待していました。実行時にgrefcとgwrefcの現在の状態を問い合わせる方法があるかどうか知っていますか?テストのためにユーザーにカスタムAPKを渡すことができました。 –
環境プロパティを設定することができます:https://developer.xamarin.com/guides/android/advanced_topics/environment/#Xamarin.Android_System_Properties次に、アプリケーションがクラッシュすると、ユーザーに 'adb logcat'を要求しますか?ローカルに複製できない場合は、少し難しいでしょう。 –