【发布时间】:2018-09-24 07:47:39
【问题描述】:
我们刚刚向 Play 商店发布了新版本的 Android 应用,现在用户报告崩溃了。我们能够重现,但是它在整个应用程序中随机发生并且是 SIGSEGV 崩溃。
https://gist.github.com/justintoth/78abbd4b647de3ee04037631e921198f
根据回溯,最后两次崩溃似乎都与图像视图有关。
崩溃 #1:
A/DEBUG(6953): #00 pc 000c1178 /system/lib/libandroid_runtime.so 04-13 17:26:53.640: A/DEBUG(6953): #01 pc 020813ce /system/framework/x86/boot-framework.oat(偏移量 0x1588000) (android.view.RenderNode.nGetTransformMatrix+138) 04-13 17:26:53.640: A/调试(6953):#02 pc 020845cd /system/framework/x86/boot-framework.oat(偏移量 0x1588000) (android.view.RenderNode.getMatrix+89) 04-13 17:26:53.640: A/调试(6953):#03 pc 020082dd /system/framework/x86/boot-framework.oat(偏移量 0x1588000) (android.view.View.getMatrix+89) 04-13 17:26:53.640: A/DEBUG(6953):
04 pc 02061f2b /system/framework/x86/boot-framework.oat (offset 0x1588000) (android.view.ViewGroup.invalidateChild+119) 04-13
17:26:53.640: A/DEBUG(6953): #05 pc 0200bda1 /system/framework/x86/boot-framework.oat(偏移量 0x1588000) (android.view.View.invalidateInternal+541) 04-13 17:26:53.640: A/调试(6953):#06 pc 0200ba3b /system/framework/x86/boot-framework.oat(偏移量 0x1588000) (android.view.View.invalidate+103) 04-13 17:26:53.640: A/DEBUG(6953):
07 pc 0200b822 /system/framework/x86/boot-framework.oat (offset 0x1588000) (android.view.View.invalidate+46) 04-13 17:26:53.640:
A/DEBUG(6953): #08 pc 0216c878 /system/framework/x86/boot-framework.oat(偏移量 0x1588000) (android.widget.ImageView.setImageDrawable+180)
崩溃 #2:
/system/lib/libskia.so (_ZN8SkMatrix13setRectToRectERK6SkRectS2_NS_10ScaleToFitE+289) 04-13 17:59:57.981:A/调试(8047):#01 pc 000f7c9d /system/lib/libandroid_runtime.so (_ZN7android12SkMatrixGlue13setRectToRectEP7_JNIEnvP8_jobjectxS4_S4_i+134) 04-13 17:59:57.981: A/DEBUG(8047): #02 pc 01936e62 /system/framework/x86/boot-framework.oat(偏移量 0x1588000) (android.graphics.Matrix.native_setRectToRect+190) 04-13 17:59:57.981: A/调试(8047):#03 pc 01939373 /system/framework/x86/boot-framework.oat(偏移量 0x1588000) (android.graphics.Matrix.setRectToRect+127) 04-13 17:59:57.981: A/调试(8047):#04 pc 0216977d /system/framework/x86/boot-framework.oat(偏移量 0x1588000) (android.widget.ImageView.configureBounds+1625) 04-13 17:59:57.981: A/调试(8047):#05 pc 0216b253 /system/framework/x86/boot-framework.oat(偏移量 0x1588000) (android.widget.ImageView.invalidateDrawable+159) 04-13 17:59:57.981: A/调试(8047):#06 pc 0170f783 /system/framework/x86/boot-framework.oat(偏移量 0x1588000) (android.graphics.drawable.Drawable.invalidateSelf+79) 04-13 17:59:57.981: A/DEBUG(8047): #07 pc 017100f5 /system/framework/x86/boot-framework.oat(偏移量 0x1588000) (android.graphics.drawable.Drawable.setVisible+81) 04-13 17:59:57.981: A/调试(8047):#08 pc 0216a91f /system/framework/x86/boot-framework.oat(偏移量 0x1588000) (android.widget.ImageView.updateDrawable+619) 04-13 17:59:57.981: A/调试(8047):#09 pc 0216c829 /system/framework/x86/boot-framework.oat(偏移量 0x1588000) (android.widget.ImageView.setImageDrawable+101)
我不清楚如何解决 SIGSEGV 崩溃问题,因为它们似乎是低级别的,并且不包含来自我的实际代码的堆栈跟踪。它们通常是我作为应用程序开发人员可以控制的崩溃,还是 Xamarin 错误?我最好的办法是尝试降级我的 Xamarin 包(这可能很困难,他们的下载页面现在只提供最后两个版本......)有人有这方面的经验吗?
【问题讨论】:
-
报告中的崩溃是
Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0(假设 com.rpr.mobile 是您的应用程序),因此您的应用程序正在访问已释放/取消引用的引用(对象/等)因为它的地址为零(0x0)。对崩溃日志进行符号化,因为在这种情况下,您正在为 ImageView 分配一个错误的可绘制对象(BitMap 已发布,或者它已被 GC 处理,或者只是不可用)。 -
@SushiHangover 谢谢,你说得对。我们不手动调用 SetImageDrawable,我们使用一个名为 FFImageLoading 的库来为我们处理这个问题,但是当我们的自定义图像视图控件从内存中释放时,我们确实有手动处理位图/可绘制对象的代码。当我禁用此自定义代码时,SIGSEGV 消失了。奇怪的是,这段代码之前运行良好,只有安装了最新的 Xamarin 才会抛出 SIGSEGV。无论如何,请发表您的评论作为答案,我会接受。
-
很高兴它有帮助。很可能是较新的 Xamarin.Android 版本正在使用不同的 GC 默认值、更快的 GC、Java JNI/Java VM 泄漏中的固定引用等......必须知道您使用的是哪个版本以及您更新了什么to....我从我的组织中添加了一个答案。评论。 ????
标签: android xamarin xamarin.android segmentation-fault