SIGSEGV Android

3

你能帮我解决这个问题吗?它发生在 Nexus 4 上。看起来是由一些字体创建代码引起的...

        06-27 16:43:59.384: A/libc(22545): Fatal signal 11 (SIGSEGV) at 0x0000000c (code=1), thread 22553 (FinalizerDaemon)
        06-27 16:43:59.485: I/DEBUG(157): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
        06-27 16:43:59.485: I/DEBUG(157): Build fingerprint: 'google/occam/mako:4.2.2/JDQ39/573038:user/release-keys'
        06-27 16:43:59.485: I/DEBUG(157): Revision: '11'
        06-27 16:43:59.485: I/DEBUG(157): pid: 22545, tid: 22553, name: FinalizerDaemon  >>> com.myapp <<<
        06-27 16:43:59.485: I/DEBUG(157): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0000000c
        06-27 16:43:59.585: I/DEBUG(157):     scr 60000093
        06-27 16:43:59.585: I/DEBUG(157): backtrace:
        06-27 16:43:59.585: I/DEBUG(157):     #00  pc 000bd244  /system/lib/libskia.so (SkFontHost::NextLogicalFont(SkScalerContext::Rec const&)+268)
        06-27 16:43:59.585: I/DEBUG(157):     #01  pc 0008cc9c  /system/lib/libskia.so (SkScalerContext::getNextContext()+44)
        06-27 16:43:59.585: I/DEBUG(157):     #02  pc 0008cd90  /system/lib/libskia.so (SkScalerContext::getContextFromChar(int, unsigned int&)+56)
        06-27 16:43:59.585: I/DEBUG(157):     #03  pc 0008ce5c  /system/lib/libskia.so (SkScalerContext::charToGlyphID(int)+12)
        06-27 16:43:59.585: I/DEBUG(157):     #04  pc 0007c480  /system/lib/libskia.so (SkPaint::textToGlyphs(void const*, unsigned int, unsigned short*) const+244)
        06-27 16:43:59.585: I/DEBUG(157):     #05  pc 0006d33b  /system/lib/libandroid_runtime.so
        06-27 16:43:59.585: I/DEBUG(157):     #06  pc 00004c20  /system/lib/libharfbuzz.so (HB_ConvertStringToGlyphIndices+104)
        06-27 16:43:59.585: I/DEBUG(157):     #07  pc 00005e4c  /system/lib/libharfbuzz.so (HB_BasicShape+12)
        06-27 16:43:59.585: I/DEBUG(157):     #08  pc 00005ed8  /system/lib/libharfbuzz.so (HB_ShapeItem+48)
        06-27 16:43:59.585: I/DEBUG(157):     #09  pc 00072c9f  /system/lib/libandroid_runtime.so (android::TextLayoutShaper::doShaping(unsigned int)+44)
        06-27 16:43:59.585: I/DEBUG(157):     #10  pc 00072e75  /system/lib/libandroid_runtime.so (android::TextLayoutShaper::shapeFontRun(SkPaint const*, bool)+284)
        06-27 16:43:59.585: I/DEBUG(157):     #11  pc 00073155  /system/lib/libandroid_runtime.so (android::TextLayoutShaper::computeRunValues(SkPaint const*, unsigned short const*, unsigned int, bool, android::Vector<float>*, float*, android::Vector<unsigned short>*, android::Vector<float>*)+712)
        06-27 16:43:59.585: I/DEBUG(157):     #12  pc 000734ad  /system/lib/libandroid_runtime.so (android::TextLayoutShaper::computeValues(SkPaint const*, unsigned short const*, unsigned int, unsigned int, unsigned int, int, android::Vector<float>*, float*, android::Vector<unsigned short>*, android::Vector<float>*)+444)
        06-27 16:43:59.585: I/DEBUG(157):     #13  pc 0007351d  /system/lib/libandroid_runtime.so (android::TextLayoutShaper::computeValues(android::TextLayoutValue*, SkPaint const*, unsigned short const*, unsigned int, unsigned int, unsigned int, int)+44)
        06-27 16:43:59.585: I/DEBUG(157):     #14  pc 00073a33  /system/lib/libandroid_runtime.so (android::TextLayoutCache::getValue(SkPaint const*, unsigned short const*, int, int, int, int)+226)
        06-27 16:43:59.585: I/DEBUG(157):     #15  pc 00073d49  /system/lib/libandroid_runtime.so (android::TextLayoutEngine::getValue(SkPaint const*, unsigned short const*, int, int, int, int)+36)
        06-27 16:43:59.585: I/DEBUG(157):     #16  pc 00072371  /system/lib/libandroid_runtime.so (android::TextLayout::getTextRunAdvances(SkPaint*, unsigned short const*, int, int, int, int, float*, float*)+42)
        06-27 16:43:59.585: I/DEBUG(157):     #17  pc 0006f319  /system/lib/libandroid_runtime.so
        06-27 16:43:59.585: I/DEBUG(157):     #18  pc 0006f49b  /system/lib/libandroid_runtime.so
        06-27 16:43:59.585: I/DEBUG(157):     #19  pc 0001e290  /system/lib/libdvm.so (dvmPlatformInvoke+112)
        06-27 16:43:59.585: I/DEBUG(157):     #20  pc 0004d411  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+396)
        06-27 16:43:59.585: I/DEBUG(157):     #21  pc 000276a0  /system/lib/libdvm.so
        06-27 16:43:59.585: I/DEBUG(157):     #22  pc 0002b57c  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
        06-27 16:43:59.585: I/DEBUG(157):     #23  pc 0005fc31  /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+272)
        06-27 16:43:59.585: I/DEBUG(157):     #24  pc 0005fc5b  /system/lib/libdvm.so (dvmCallMethod(Thread*, Method const*, Object*, JValue*, ...)+20)
        06-27 16:43:59.585: I/DEBUG(157):     #25  pc 000547d7  /system/lib/libdvm.so
        06-27 16:43:59.585: I/DEBUG(157):     #26  pc 0000e3d8  /system/lib/libc.so (__thread_entry+72)
        06-27 16:43:59.585: I/DEBUG(157):     #27  pc 0000dac4  /system/lib/libc.so (pthread_create+160)
        06-27 16:43:59.585: I/DEBUG(157): stack:

我发现这个问题也出现了,但我无法定期复现它...

06-27 16:43:59.595: I/DEBUG(157): 730368a4 404b3e60 /system/lib/libskia.so (SkScalerContext::charToGlyphID(int)+16)

1个回答

2

是的,这也经常发生在我身上!在运行Android 4.1的Nexsus S上,使用名为ca.ilanguage.labs.pocketsphix的应用程序和标签libc,在TestPocketSphinxAndAndroidASR中出现该问题。

具体错误信息:

Fatal signal 11 (SIGSEGV) at 0x0000001a (code=1), thread 3182 (FinalizerDaemon)

这在Android 2.2上不会发生。看起来是特定NDK代码的不兼容依赖关系,我还不知道如何修复Android 4.1的问题。

我怀疑这与Toast有关,果然,如果我注释掉以下行,应用程序就不会崩溃!(即使在Android 4.1上)

Toast.makeText(TestPocketSphinxAndAndroidASR.this, "Possible recognitions: "+matches.toString(), Toast.LENGTH_LONG).show();

如果我把单行语句分成几行:
  String msg = "Possible recognitions: "+ matches.toString();
  Toast toast = Toast.makeText(TestPocketSphinxAndAndroidASR.this, msg, Toast.LENGTH_LONG);
  toast.show();

崩溃问题仍然存在,但是如果我在其中插入LogCat语句,应用程序将显示toast而不会崩溃!

  String msg = "Possible recognitions: "+ matches.toString();
  Log.d(getClass().getName(), msg);
  Toast toast = Toast.makeText(TestPocketSphinxAndAndroidASR.this, msg, Toast.LENGTH_LONG);
  toast.show();

奇怪。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接