应用随机崩溃与致命信号7(SIGBUS),代码2或致命信号11(SIGSEGV),代码1

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了应用随机崩溃与致命信号7(SIGBUS),代码2或致命信号11(SIGSEGV),代码1相关的知识,希望对你有一定的参考价值。

上下文

我正在创建一个应用程序,它应该在Fragment上显示一些图像,其中大部分都是从互联网上下载的。

我正在使用Glide处理我的CardViews上的图像加载和我的图像滑块上的Fresco(而this question on SO解释了为什么我使用两个图像库)。

lib的Fresco部分主要基于this forkandroidImageSlider

重要提示:我正在尝试加载的图像可以是PNGSVG

更多信息:我正在使用运行Android 5.0.2的Moto Maxx(国际版Droid Turbo)。也发生在运行Android 4.4.2(cyanogen mod)的三星Galaxy S4上,但它的发生频率要低得多。

P.S。:我不使用NDK。

问题

有时,我的应用程序只是崩溃,无处不在,甚至没有任何用户交互。当它发生时,我在logcat上收到以下错误消息:

Fatal signal 7 (SIGBUS), code 2, fault addr 0x9a74c060 in tid 21894

全栈:

04-07 07:59:08.110 21894 21894 F libc    : Fatal signal 7 (SIGBUS), code 2, fault addr 0x9a74c060 in tid 21894 (asus.saitestore)
04-07 07:59:08.161 21946 21946 E Diag_Lib:  Diag_LSM_Init: Failed to open handle to diag driver, error = 2
04-07 07:59:08.263   333   333 I DEBUG   : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
04-07 07:59:08.263   333   333 I DEBUG   : Build fingerprint: 'motorola/quark_retbr/quark_umts:5.0.2/LXG22.33-12.16/16:user/release-keys'
04-07 07:59:08.263   333   333 I DEBUG   : Revision: 'p4a0'
04-07 07:59:08.263   333   333 I DEBUG   : ABI: 'arm'
04-07 07:59:08.263   333   333 I DEBUG   : pid: 21894, tid: 21894, name: asus.saitestore  >>> org.unasus.saitestore <<<
04-07 07:59:08.264   333   333 I DEBUG   : signal 7 (SIGBUS), code 2 (BUS_ADRERR), fault addr 0x9a74c060
04-07 07:59:08.446   333   333 I DEBUG   :     r0 00000000  r1 bead50cc  r2 00000000  r3 9dae4000
04-07 07:59:08.446   333   333 I DEBUG   :     r4 9dae4000  r5 9a74c060  r6 bead50d4  r7 00000001
04-07 07:59:08.446   333   333 I DEBUG   :     r8 00063054  r9 00000000  sl 000000fe  fp 00000000
04-07 07:59:08.446   333   333 I DEBUG   :     ip 00000000  sp bead5094  lr b5952d63  pc b5a38426  cpsr 800b0030
04-07 07:59:08.447   333   333 I DEBUG   : 
04-07 07:59:08.447   333   333 I DEBUG   : backtrace:
04-07 07:59:08.447   333   333 I DEBUG   :     #00 pc 001b2426  /system/lib/libskia.so (S32_opaque_D32_nofilter_DX_neon(SkBitmapProcState const&, unsigned int const*, int, unsigned int*)+141)
04-07 07:59:08.447   333   333 I DEBUG   :     #01 pc 000ccd61  /system/lib/libskia.so (SkBitmapProcShader::BitmapProcShaderContext::shadeSpan(int, int, unsigned int*, int)+86)
04-07 07:59:08.447   333   333 I DEBUG   :     #02 pc 000d6cff  /system/lib/libskia.so (SkARGB32_Shader_Blitter::blitV(int, int, int, unsigned char)+528)
04-07 07:59:08.447   333   333 I DEBUG   :     #03 pc 001076c1  /system/lib/libskia.so
04-07 07:59:08.447   333   333 I DEBUG   :     #04 pc 0010782d  /system/lib/libskia.so
04-07 07:59:08.447   333   333 I DEBUG   :     #05 pc 001078b9  /system/lib/libskia.so
04-07 07:59:08.447   333   333 I DEBUG   :     #06 pc 00107cf3  /system/lib/libskia.so (SkScan::AntiFillRect(SkRect const&, SkRegion const*, SkBlitter*)+178)
04-07 07:59:08.447   333   333 I DEBUG   :     #07 pc 0010804b  /system/lib/libskia.so (SkScan::AntiFillRect(SkRect const&, SkRasterClip const&, SkBlitter*)+14)
04-07 07:59:08.447   333   333 I DEBUG   :     #08 pc 000e2031  /system/lib/libskia.so (SkDraw::drawRect(SkRect const&, SkPaint const&) const+252)
04-07 07:59:08.447   333   333 I DEBUG   :     #09 pc 000e3513  /system/lib/libskia.so (SkDraw::drawBitmap(SkBitmap const&, SkMatrix const&, SkPaint const&) const+276)
04-07 07:59:08.447   333   333 I DEBUG   :     #10 pc 000db7c5  /system/lib/libskia.so
04-07 07:59:08.447   333   333 I DEBUG   :     #11 pc 000db8ad  /system/lib/libskia.so (SkCanvas::drawBitmap(SkBitmap const&, float, float, SkPaint const*)+116)
04-07 07:59:08.447   333   333 I DEBUG   :     #12 pc 000f97bb  /system/lib/libskia.so (SkPicturePlayback::draw(SkCanvas&, SkDrawPictureCallback*)+1186)
04-07 07:59:08.447   333   333 I DEBUG   :     #13 pc 000b54c7  /system/framework/arm/boot.oat
04-07 07:59:09.190   333   333 I DEBUG   : Tombstone written to: /data/tombstones/tombstone_08
04-07 07:59:09.205   806   828 I BootReceiver: Copying /data/tombstones/tombstone_08 to DropBox (SYSTEM_TOMBSTONE)

有一次,它也给了我一个不同的错误信息:

Fatal signal 11 (SIGSEGV), code 1, fault addr 0x9abe300c in tid 30052

完整的堆栈:

04-04 15:41:34.059: A/libc(30052): Fatal signal 11 (SIGSEGV), code 1, fault addr 0x9abe300c in tid 30052 (asus.saitestore)
04-04 15:41:34.161: I/DEBUG(28994): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
04-04 15:41:34.161: I/DEBUG(28994): Build fingerprint: 'motorola/quark_retbr/quark_umts:5.0.2/LXG22.33-12.16/16:user/release-keys'
04-04 15:41:34.161: I/DEBUG(28994): Revision: 'p4a0'
04-04 15:41:34.161: I/DEBUG(28994): ABI: 'arm'
04-04 15:41:34.161: I/DEBUG(28994): pid: 30052, tid: 30052, name: asus.saitestore  >>> org.unasus.saitestore <<<
04-04 15:41:34.161: I/DEBUG(28994): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x9abe300c
04-04 15:41:34.177: I/DEBUG(28994):     r0 00000000  r1 bede70a4  r2 00000000  r3 9ce89000
04-04 15:41:34.178: I/DEBUG(28994):     r4 9ce89000  r5 9abe300c  r6 bede70ac  r7 00000001
04-04 15:41:34.178: I/DEBUG(28994):     r8 00000000  r9 00000000  sl 000000fe  fp 00000000
04-04 15:41:34.178: I/DEBUG(28994):     ip 00000000  sp bede706c  lr b5992d63  pc b5a78426  cpsr 800b0030
04-04 15:41:34.178: I/DEBUG(28994): backtrace:
04-04 15:41:34.178: I/DEBUG(28994):     #00 pc 001b2426  /system/lib/libskia.so (S32_opaque_D32_nofilter_DX_neon(SkBitmapProcState const&, unsigned int const*, int, unsigned int*)+141)
04-04 15:41:34.178: I/DEBUG(28994):     #01 pc 000ccd61  /system/lib/libskia.so (SkBitmapProcShader::BitmapProcShaderContext::shadeSpan(int, int, unsigned int*, int)+86)
04-04 15:41:34.178: I/DEBUG(28994):     #02 pc 000d6cff  /system/lib/libskia.so (SkARGB32_Shader_Blitter::blitV(int, int, int, unsigned char)+528)
04-04 15:41:34.178: I/DEBUG(28994):     #03 pc 0010721d  /system/lib/libskia.so
04-04 15:41:34.178: I/DEBUG(28994):     #04 pc 00107669  /system/lib/libskia.so
04-04 15:41:34.178: I/DEBUG(28994):     #05 pc 0010782d  /system/lib/libskia.so
04-04 15:41:34.178: I/DEBUG(28994):     #06 pc 001078b9  /system/lib/libskia.so
04-04 15:41:34.178: I/DEBUG(28994):     #07 pc 00107cf3  /system/lib/libskia.so (SkScan::AntiFillRect(SkRect const&, SkRegion const*, SkBlitter*)+178)
04-04 15:41:34.179: I/DEBUG(28994):     #08 pc 0010804b  /system/lib/libskia.so (SkScan::AntiFillRect(SkRect const&, SkRasterClip const&, SkBlitter*)+14)
04-04 15:41:34.179: I/DEBUG(28994):     #09 pc 000e2031  /system/lib/libskia.so (SkDraw::drawRect(SkRect const&, SkPaint const&) const+252)
04-04 15:41:34.179: I/DEBUG(28994):     #10 pc 000e3513  /system/lib/libskia.so (SkDraw::drawBitmap(SkBitmap const&, SkMatrix const&, SkPaint const&) const+276)
04-04 15:41:34.179: I/DEBUG(28994):     #11 pc 000db7c5  /system/lib/libskia.so
04-04 15:41:34.179: I/DEBUG(28994):     #12 pc 000db8ad  /system/lib/libskia.so (SkCanvas::drawBitmap(SkBitmap const&, float, float, SkPaint const*)+116)
04-04 15:41:34.179: I/DEBUG(28994):     #13 pc 000f97bb  /system/lib/libskia.so (SkPicturePlayback::draw(SkCanvas&, SkDrawPictureCallback*)+1186)
04-04 15:41:34.179: I/DEBUG(28994):     #14 pc 000b54c7  /system/framework/arm/boot.oat
04-04 15:41:34.820: I/DEBUG(28994): Tombstone written to: /data/tombstones/tombstone_07
04-04 15:41:34.821: I/BootReceiver(1989): Copying /data/tombstones/tombstone_07 to DropBox (SYSTEM_TOMBSTONE)

编辑:也发生在三星Galaxy S4,tombstone can be found here

我是如何加载图像的

在我的CardAdapter里面,我正在加载这样的图像(SVG部分取自here):

if (mod.getImg_type() == ImageTypes.SVG) 
    GenericRequestBuilder<Uri, InputStream, SVG, PictureDrawable> requestBuilder;

    SVGDecoder decoder = new SVGDecoder(PreserveAspectRatio.STRETCH);

    requestBuilder = Glide.with(mContext)
            .using(Glide.buildStreamModelLoader(Uri.class, mContext), InputStream.class)
            .from(Uri.class)
            .as(SVG.class)
            .transcode(new SvgDrawableTranscoder(), PictureDrawable.class)
            .sourceEncoder(new StreamEncoder())
            .cacheDecoder(new FileToStreamDecoder<>(decoder))
            .decoder(decoder)
            .placeholder(R.drawable.modulo)
            .error(R.drawable.banner_error)
            .animate(android.R.anim.fade_in)
            .listener(new SvgSoftwareLayerSetter<Uri>());

    requestBuilder
            .diskCacheStrategy(DiskCacheStrategy.SOURCE)
            .load(Uri.parse(mod.getUrl_icon()))
            .into(cardHolder.iv_card);

else 
    Glide.with(mContext)
            .load(mod.getUrl_icon())
            .placeholder(R.drawable.modulo)
            .error(R.drawable.banner_error)
            .centerCrop()
            .crossFade()
            .into(cardHolder.iv_card);

XML文件看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/card_view"
    android:layout_width="@dimen/card_w"
    android:layout_height="@dimen/card_h"
    android:layout_margin="5dp"
    android:stateListAnimator="@anim/raise"
    card_view:cardCornerRadius="0dp"
    android:foreground="?android:attr/selectableItemBackground">

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/rl_card">


        <ImageView
            android:layout_width="@dimen/card_image_w"
            android:layout_height="@dimen/card_image_h"
            android:layout_centerHorizontal="true"
            android:scaleType="fitXY"
            android:id="@+id/iv_card"
            android:src="@drawable/modulo"
            android:layout_margin="@dimen/spacing_medium" />

        <TextView
            android:id="@+id/tv_card"
            android:layout_width="@dimen/card_text_w"
            android:layout_height="@dimen/card_text_h"
            android:maxHeight="@dimen/card_text_h"
            android:maxWidth="@dimen/card_text_w"
            android:layout_below="@+id/iv_card"
            android:layout_centerHorizontal="true"
            android:ellipsize="end"
            android:maxLines="1"
            android:singleLine="true"
            android:text="Bacon ipsum dolor amet duis short ribs nostrud esse tempor."
            android:textSize="12sp"
            android:gravity="center_horizontal"
            android:layout_marginLeft="@dimen/spacing_medium"
            android:layout_marginRight="@dimen/spacing_medium" />

        <View
            android:id="@+id/card_check"
            android:layout_width="match_parent"
            android:layout_height="@dimen/card_check_h"
            android:maxHeight="@dimen/card_check_h"
            android:layout_below="@+id/tv_card"
            android:background="@color/primary_light"
            android:layout_alignParentBottom="true" />
    </RelativeLayout>

</android.support.v7.widget.CardView>

到目前为止我发现了什么

我在这里找到了几个问题,但是没有一个问题对我的问题有帮助。重现它有点困难。有时,即使在故障屏幕上30分钟后,应用程序也不会崩溃。另一方面,它发生在图像显示之后。

我发现的一些问题:

还有很多人......

这是应用程序的截图,取自我手机生成的错误报告:

screenshot

我在某些地方看到这个问题可能与内存不足有关。但我认为这不太可能,因为我的手机有3GB或RAM,而且我加载的图像比本机图库应用程序(没有在手机上崩溃)更少。

另一方面,skia问题跟踪器上的线程表明它与SVG lib有关。

更新:我在Android问题跟踪器上找到了this link,在skia问题跟踪器上找到了this one,这很可能与问题有关。

其他更新:我删除了滑块,应用程序停止崩溃。我猜问题就在那里。

又一个更新:我已经改变了滑块,在给定时间内只加载PNG或仅加载SVG。该应用程序只在加载SVG图像时崩溃。所以也许问题出在SVG lib上。

从文件加载SVG也会崩溃。

答案

我不会真的有一个解决方案,但我相信我有一些有用的提示,以帮助你进一步挖掘问题,但是评论很长

你已经缩小了问题的范围。问题很可能出在部分或全部SVG上。

因此,我将集中精力确定所有SVG或其中一些是否导致该问题。

浏览你提到的“SVG lib”代码看起来它没有任何本机组件,所以我不会责怪它。

检查你的回溯非常清楚崩溃是在“Skia”本地库(libskia.so)上。

在你的回溯中发布人类可读的部分:

/system/lib/libskia.so (S32_opaque_D32_nofilter_DX_neon(SkBitmapProcState const&, unsigned int const*, int, unsigned int*)+141)
/system/lib/libskia.so (SkBitmapProcShader::BitmapProcShaderContext::shadeSpan(int, int, unsigned int*, int)+86)
/system/lib/libskia.so (SkARGB32_Shader_Blitter::blitV(int, int, int, unsigned char)+528)

/system/lib/libskia.so (SkScan::AntiFillRect(SkRect const&, SkRegion const*, SkBlitter*)+178)
/system/lib/libskia.so (SkScan::AntiFillRect(SkRect const&, SkRasterClip const&, SkBlitter*)+14)
/system/lib/libskia.so (SkDraw::drawRect(SkRect const&, SkPaint const&) const+252)
/system/lib/libskia.so (SkDraw::drawBitmap(SkBitmap const&, SkMatrix const&, SkPaint const&) const+276)

/system/lib/libskia.so (SkCanvas::drawBitmap(SkBitmap const&, float, float, SkPaint const*)+116)
/system/lib/libskia.so (SkPicturePlayback::draw(SkCanvas&, SkDrawPictureCallback*)+1186)

Backtrace是从上到下读取的,所以我发布的第一行是完全崩溃的。一些不透明的东西没有过滤器的东西霓虹灯(NEON在处理器芯片上,设备是否支持)

关于Skia library的一些额外细节:

Skia是一个开源的2D图形库,提供可在各种硬件和软件平台上运行的通用API。它是Google Chrome和Chrome OS,Android,Mozilla Firefox和Firefox OS以及许多其他产品的图形引擎。

Skia由Google赞助和管理,但任何人都可以使用BSD自由软件许可。虽然核心组件的工程由Skia开发团队完成,但我们会考虑来自任何来源的贡献。

因此,问题很可能是“Android源代码”或您的测试设备使用的ROM。你有没有在vanila android上测试应用程序,看它是否仍然崩溃?或者至少有一些没有自定义ROM的东西,因为你可能会遇到一些限制。我自己在有关霓虹灯功能的自定义ROMS上面临一些限制,但从未在OEM / Stock ROM上使用过。

最后但并非最不重要的是,在将SVG加载到Android时存在一些限制,因此另一个概率是击中其中一个。谷歌搜索我发现一个article提到它,不知道它是否是唯一的一个。

Android开发人员参考建议将矢量图像限制为最大200 x 200 dpi,因为矢量图形的初始加载可能相对昂贵,从而导致较长的绘制时间。

以上是关于应用随机崩溃与致命信号7(SIGBUS),代码2或致命信号11(SIGSEGV),代码1的主要内容,如果未能解决你的问题,请参考以下文章

信号 7 (SIGBUS),代码 2 (BUS_ADRERR)

Android WebRTC 随机崩溃,致命信号 6 (SIGABRT)、tid 1191 (TimeCheckThread) 中的代码 -6 (SI_TKILL)、pid 656 (audioser

原生Android应用程序中的SIGSEGV错误

dlopen 崩溃(接收 SIGBUS)

应用程序崩溃(有时),致命信号 11 (SIGSEGV),代码 1

Native崩溃说明 so库崩溃SIGBUS(bad memory access) 和 SIGSEGV(Invalid memory reference)