gpt4 book ai didi

android - 如何诊断 Xamarin Android 弱引用表溢出的原因?

转载 作者:行者123 更新时间:2023-11-29 02:42:09 24 4
gpt4 key购买 nike

我收到多位用户的报告,称我的应用程序在密集使用约 5 分钟后崩溃了。我在 Google Play 上收到了崩溃日志,下面附有一个示例。消息似乎是:

JNI 错误(应用错误):弱全局引用表溢出 (max=51200)'

我对 JNI 不熟悉,如果有任何关于如何解决这个问题的建议/解释/建议,我将不胜感激。可能的原因是我的代码中的某些内容没有得到清理,但是什么?

已报告此问题的设备是 Nexus 5.xGalaxy S7Nexus 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

最佳答案

这里有一篇关于这个主题的很长但非常有用的文档:

https://developer.xamarin.com/guides/android/troubleshooting/troubleshooting/#Global_Reference_Messages

对于第一次通过,您应该尝试通过 .txt 文件启用系统属性,该文件的 Build Action 设置为 $(AndroidEnvironment) :

debug.mono.log gref

https://developer.xamarin.com/guides/android/advanced_topics/environment/#Xamarin.Android_System_Properties

然后您将从设备中获取包含此日志记录的 adb logcat

但是,如果这对您不利:

您应该可以通过以下方式直接查询:

Java.Interop.JniRuntime.CurrentRuntime.GlobalReferenceCount

Java.Interop.JniRuntime.CurrentRuntime.WeakGlobalReferenceCount

本地引用也在 Java.Interop.JniEnvironment.LocalReferenceCount 中进行跟踪,这是一个线程本地值。

关于android - 如何诊断 Xamarin Android 弱引用表溢出的原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43403968/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com