3

我最近开始在我们的应用程序中获取这个 SIGSEGV,并试图找出原因或解决方法。我们的应用程序仅是 Java,我们不使用 NDK,因此我们自己不会破坏内存。

这是运行 4.2.2 的库存 Nexus 7

该错误是间歇性的,但堆栈中总是有 SkCanvas::drawPosText(下面是几个完整的堆栈转储):

backtrace:
   #00  pc 01010200  <unknown>
   #01  pc 0005ce24  /system/lib/libskia.so (AutoDrawLooper::next(SkDrawFilter::Type)+96)
   #02  pc 0005e320  /system/lib/libskia.so (SkCanvas::drawPosText(void const*, unsigned int, SkPoint const*, SkPaint const&)+152)

我们最近进行了一项更改,导致对用作 OpenGL 纹理的位图进行更频繁的文本渲染(我认为是 GL 线程上的文本渲染),也许这与某种原因有关?

顺便说一句,只是一个普遍的问题——有没有办法找出触发这个调用的 Java 方法?我在堆栈中看到了各种 dvmInterpret,但不知道是否有办法找出正在运行的代码。

示例错误转储 #1:

:41.380: A/libc(6861): Fatal signal 11 (SIGSEGV) at 0x01010200 (code=1), thread 6861 (ootworks.swords)
:41.480: I/DEBUG(124): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
:41.480: I/DEBUG(124): Build fingerprint: 'google/nakasi/grouper:4.2.2/JDQ39/573038:user/release-keys'
:41.480: I/DEBUG(124): Revision: '0'
:41.480: I/DEBUG(124): pid: 6861, tid: 6861, name: ootworks.swords  >>> com.lootworks.swords <<<
:41.480: I/DEBUG(124): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 01010200
:41.620: I/DEBUG(124):     r0 68445e30  r1 634b6290  r2 bee3e074  r3 01010201
:41.620: I/DEBUG(124):     r4 bee3e070  r5 bee3e074  r6 00000006  r7 00000012
:41.620: I/DEBUG(124):     r8 61cf4248  r9 00000000  sl 00000000  fp 634b6290
:41.620: I/DEBUG(124):     ip 61d0e900  sp bee3dfa8  lr 402dae28  pc 01010200  cpsr 28000030
:41.620: I/DEBUG(124):     d0  40df000040df0000  d1  c04d5064404d5064
:41.620: I/DEBUG(124):     d2  4083ebe840ea941a  d3  3f8a0000447f0000
:41.620: I/DEBUG(124):     d4  407f000040a20000  d5  40df000000000100
:41.620: I/DEBUG(124):     d6  413896783f2c0000  d7  c066283400000000
:41.620: I/DEBUG(124):     d8  4103126f41816e00  d9  44a0000000000000
:41.620: I/DEBUG(124):     d10 0000000042e54c32  d11 0000000000000000
:41.620: I/DEBUG(124):     d12 0000000000000000  d13 0000000000000000
:41.620: I/DEBUG(124):     d14 0000000000000000  d15 0000000000000000
:41.620: I/DEBUG(124):     d16 0000000000000000  d17 0000000000000000
:41.620: I/DEBUG(124):     d18 0000000000000000  d19 0000000000000000
:41.620: I/DEBUG(124):     d20 0000000000000000  d21 3ff0000000000000
:41.620: I/DEBUG(124):     d22 8000000000000000  d23 0000000000000000
:41.620: I/DEBUG(124):     d24 0000000000000000  d25 8000000000000000
:41.620: I/DEBUG(124):     d26 3ff0000000000000  d27 0100010001000100
:41.620: I/DEBUG(124):     d28 0100010001000100  d29 0100010001000100
:41.620: I/DEBUG(124):     d30 0000000000000005  d31 0000000000000000
:41.620: I/DEBUG(124):     scr 60000093
:41.630: I/DEBUG(124): backtrace:
:41.630: I/DEBUG(124):     #00  pc 01010200  <unknown>
:41.630: I/DEBUG(124):     #01  pc 0005ce24  /system/lib/libskia.so (AutoDrawLooper::next(SkDrawFilter::Type)+96)
:41.630: I/DEBUG(124):     #02  pc 0005e320  /system/lib/libskia.so (SkCanvas::drawPosText(void const*, unsigned int, SkPoint const*, SkPaint const&)+152)
:41.630: I/DEBUG(124):     #03  pc 0006b975  /system/lib/libandroid_runtime.so
:41.630: I/DEBUG(124):     #04  pc 0006bb93  /system/lib/libandroid_runtime.so
:41.630: I/DEBUG(124):     #05  pc 0001e290  /system/lib/libdvm.so (dvmPlatformInvoke+112)
:41.630: I/DEBUG(124):     #06  pc 0004d411  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+396)
:41.630: I/DEBUG(124):     #07  pc 000276a0  /system/lib/libdvm.so
:41.630: I/DEBUG(124):     #08  pc 0002b57c  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
:41.630: I/DEBUG(124):     #09  pc 0005fc31  /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+272)
:41.630: I/DEBUG(124):     #10  pc 0004c32d  /system/lib/libdvm.so
:41.630: I/DEBUG(124):     #11  pc 0003fd21  /system/lib/libdvm.so
:41.630: I/DEBUG(124):     #12  pc 00049181  /system/lib/libandroid_runtime.so
:41.630: I/DEBUG(124):     #13  pc 00059d57  /system/lib/libandroid_runtime.so (android::NativeInputEventReceiver::consumeEvents(_JNIEnv*, bool, long long)+246)
:41.630: I/DEBUG(124):     #14  pc 00059e5d  /system/lib/libandroid_runtime.so (android::NativeInputEventReceiver::handleEvent(int, int, void*)+92)
:41.630: I/DEBUG(124):     #15  pc 00014cad  /system/lib/libutils.so (android::Looper::pollInner(int)+516)
:41.630: I/DEBUG(124):     #16  pc 00014d71  /system/lib/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+104)
:41.630: I/DEBUG(124):     #17  pc 0005ed53  /system/lib/libandroid_runtime.so (android::NativeMessageQueue::pollOnce(_JNIEnv*, int)+22)
:41.630: I/DEBUG(124):     #18  pc 0001e290  /system/lib/libdvm.so (dvmPlatformInvoke+112)
:41.630: I/DEBUG(124):     #19  pc 0004d411  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+396)
:41.630: I/DEBUG(124):     #20  pc 00000214  /dev/ashmem/dalvik-jit-code-cache (deleted)
:41.630: I/DEBUG(124): stack:
:41.630: I/DEBUG(124):          bee3df68  00000012  
:41.630: I/DEBUG(124):          bee3df6c  40106813  /system/lib/libc.so (dlfree+34)
:41.630: I/DEBUG(124):          bee3df70  000001bf  
:41.630: I/DEBUG(124):          bee3df74  61d0e8d0  
:41.630: I/DEBUG(124):          bee3df78  00000012  
:41.630: I/DEBUG(124):          bee3df7c  61cf4248  
:41.630: I/DEBUG(124):          bee3df80  00000000  
:41.630: I/DEBUG(124):          bee3df84  00000000  
:41.630: I/DEBUG(124):          bee3df88  634b6290  
:41.630: I/DEBUG(124):          bee3df8c  bee3e074  [stack]
:41.630: I/DEBUG(124):          bee3df90  bee3e074  [stack]
:41.630: I/DEBUG(124):          bee3df94  402f871c  /system/lib/libskia.so (SkPaint::operator=(SkPaint const&)+500)
:41.630: I/DEBUG(124):          bee3df98  bee3e070  [stack]
:41.630: I/DEBUG(124):          bee3df9c  00000000  
:41.630: I/DEBUG(124):          bee3dfa0  df0027ad  
:41.630: I/DEBUG(124):          bee3dfa4  00000000  
:41.630: I/DEBUG(124):     #00  bee3dfa8  00000000  
:41.630: I/DEBUG(124):          ........  ........
:41.630: I/DEBUG(124):     #01  bee3dfa8  00000000  
:41.630: I/DEBUG(124):          bee3dfac  00000000  
:41.630: I/DEBUG(124):          bee3dfb0  61d44ba0  
:41.630: I/DEBUG(124):          bee3dfb4  402dc324  /system/lib/libskia.so (SkCanvas::drawPosText(void const*, unsigned int, SkPoint const*, SkPaint const&)+156)
:41.630: I/DEBUG(124):     #02  bee3dfb8  00000000  
:41.630: I/DEBUG(124):          bee3dfbc  00000002  
:41.630: I/DEBUG(124):          bee3dfc0  bee3e074  [stack]
:41.630: I/DEBUG(124):          bee3dfc4  bee3e074  [stack]
:41.630: I/DEBUG(124):          bee3dfc8  00000009  
:41.630: I/DEBUG(124):          bee3dfcc  00000000  
:41.630: I/DEBUG(124):          bee3dfd0  bee3e070  [stack]
:41.630: I/DEBUG(124):          bee3dfd4  40140228  
:41.630: I/DEBUG(124):          bee3dfd8  41f6e7cb  /dev/ashmem/dalvik-heap (deleted)
:41.630: I/DEBUG(124):          bee3dfdc  00000000  
:41.630: I/DEBUG(124):          bee3dfe0  3f800000  
:41.630: I/DEBUG(124):          bee3dfe4  61ee9b00  
:41.630: I/DEBUG(124):          bee3dfe8  634b62f4  
:41.630: I/DEBUG(124):          bee3dfec  6837d668  
:41.630: I/DEBUG(124):          bee3dff0  6837d668  
:41.630: I/DEBUG(124):          bee3dff4  634b6298  
:41.630: I/DEBUG(124):          ........  ........
:41.640: I/DEBUG(124): memory near r0:
:41.640: I/DEBUG(124):     68445e10 61967fec 00000000 74636120 00000013  
:41.640: I/DEBUG(124):     68445e20 00000000 68445e20 68445e20 0000002b  
:41.640: I/DEBUG(124):     68445e30 4069cb68 4013fc7c 61f0e878 00000000  
:41.640: I/DEBUG(124):     68445e40 40800000 40800000 80000000 02000000  
:41.640: I/DEBUG(124):     68445e50 00000028 0000001b 00000000 00000001  
:41.640: I/DEBUG(124):     68445e60 61db2524 00000000 0069006f 0000005b  
:41.640: I/DEBUG(124):     68445e70 00000048 00000000 68445eb4 00000001  
:41.640: I/DEBUG(124):     68445e80 00000000 40563a4d 00000000 68445eb4  
:41.640: I/DEBUG(124):     68445e90 00000002 00000000 00000000 00000000  
:41.640: I/DEBUG(124):     68445ea0 68445eb4 00000003 00000000 00000000  
:41.640: I/DEBUG(124):     68445eb0 00000000 41434f4e 00004553 68396558  
:41.640: I/DEBUG(124):     68445ec0 64bfff18 0000001b 6224e470 0000000e  
:41.640: I/DEBUG(124):     68445ed0 00000000 00000000 00000001 0000001b  
:41.640: I/DEBUG(124):     68445ee0 61f7a230 0000027e 00000000 00000000  
:41.640: I/DEBUG(124):     68445ef0 00000001 0000002b 00000018 00000000  
:41.640: I/DEBUG(124):     68445f00 61d81940 68755940 635e0690 635e06cc  
:41.640: I/DEBUG(124): memory near r1:
:41.640: I/DEBUG(124):     634b6270 40db0000 c1390000 40b28000 c1390000  
:41.640: I/DEBUG(124):     634b6280 40980000 c1298000 407c0000 0000014b  
:41.640: I/DEBUG(124):     634b6290 403d3418 00000001 00000000 00000000  
:41.640: I/DEBUG(124):     634b62a0 00000058 00000000 00000000 00000000  
:41.640: I/DEBUG(124):     634b62b0 634b62c8 61968648 0000006c 634b62c8  
:41.640: I/DEBUG(124):     634b62c0 00000001 634b62dc 61968648 00000000  
:41.640: I/DEBUG(124):     634b62d0 634b62dc 634b6348 634b6348 00000000  
:41.640: I/DEBUG(124):     634b62e0 634b62f4 634b631c 00000000 6837d660  
:41.640: I/DEBUG(124):     634b62f0 6837d660 3f800000 00000000 00000000  
:41.640: I/DEBUG(124):     634b6300 00000000 3f800000 00000000 00000000  
:41.640: I/DEBUG(124):     634b6310 00000000 3f800000 413a9d10 00000000  
:41.640: I/DEBUG(124):     634b6320 00000000 00000200 00000080 00000000  
:41.640: I/DEBUG(124):     634b6330 00000000 00000000 00000000 00000000  
:41.640: I/DEBUG(124):     634b6340 00000000 3f00a001 00000000 61ee9af8  
:41.640: I/DEBUG(124):     634b6350 00000000 c1048000 00000000 00000000  
:41.650: I/DEBUG(124):     634b6360 00000000 00000000 41144801 00000000  
:41.650: I/DEBUG(124): memory near r2:
:41.650: I/DEBUG(124):     bee3e054 4007ddc0 40850d4c 407fad21 4314c140  
:41.650: I/DEBUG(124):     bee3e064 407faeb5 bee3e174 61cf3240 bee3e074  
:41.650: I/DEBUG(124):     bee3e074 4003eca0 41c5863c 3f800000 00000000  
:41.650: I/DEBUG(124):     bee3e084 00000000 00000000 00000000 00000000  
:41.650: I/DEBUG(124):     bee3e094 00000000 00000000 58c2fec0 00000000  
:41.650: I/DEBUG(124):     bee3e0a4 ffffffff 3f80a0cd 40800000 05400101  
:41.650: I/DEBUG(124):     bee3e0b4 58b4d958 00000000 000001c0 634b6290  
:41.650: I/DEBUG(124):     bee3e0c4 61d0e8d0 68445e30 00000000 00000000  
:41.650: I/DEBUG(124):     bee3e0d4 00000001 634b6200 2ba413d0 00000009  
:41.650: I/DEBUG(124):     bee3e0e4 61d0e8d0 634b6290 61d44ba0 402dc288  
:41.650: I/DEBUG(124):     bee3e0f4 00000000 61cf4248 61dad370 bee3e1fc  
:41.650: I/DEBUG(124):     bee3e104 40214977 61d0e8d0 00000009 00000009  
:41.650: I/DEBUG(124):     bee3e114 00000002 61d0e2a8 408701b0 4314c110  
:41.650: I/DEBUG(124):     bee3e124 00000000 40870518 4080ae5b 4314c110  
:41.650: I/DEBUG(124):     bee3e134 2ba413d0 bee3e154 00000001 4314c120  
:41.650: I/DEBUG(124):     bee3e144 00000000 4314c140 00000000 61dc00bc  
:41.650: I/DEBUG(124): memory near r3:
:41.650: I/DEBUG(124):     010101e0 ffffffff ffffffff ffffffff ffffffff  
:41.650: I/DEBUG(124):     010101f0 ffffffff ffffffff ffffffff ffffffff  
:41.650: I/DEBUG(124):     01010200 ffffffff ffffffff ffffffff ffffffff  
:41.650: I/DEBUG(124):     01010210 ffffffff ffffffff ffffffff ffffffff  
:41.650: I/DEBUG(124):     01010220 ffffffff ffffffff ffffffff ffffffff  
:41.650: I/DEBUG(124):     01010230 ffffffff ffffffff ffffffff ffffffff  
:41.650: I/DEBUG(124):     01010240 ffffffff ffffffff ffffffff ffffffff  
:41.650: I/DEBUG(124):     01010250 ffffffff ffffffff ffffffff ffffffff  
:41.650: I/DEBUG(124):     01010260 ffffffff ffffffff ffffffff ffffffff  
:41.650: I/DEBUG(124):     01010270 ffffffff ffffffff ffffffff ffffffff  
:41.650: I/DEBUG(124):     01010280 ffffffff ffffffff ffffffff ffffffff  
:41.650: I/DEBUG(124):     01010290 ffffffff ffffffff ffffffff ffffffff  
:41.650: I/DEBUG(124):     010102a0 ffffffff ffffffff ffffffff ffffffff  
:41.650: I/DEBUG(124):     010102b0 ffffffff ffffffff ffffffff ffffffff  
:41.650: I/DEBUG(124):     010102c0 ffffffff ffffffff ffffffff ffffffff  
:41.650: I/DEBUG(124):     010102d0 ffffffff ffffffff ffffffff ffffffff  
:41.650: I/DEBUG(124): memory near r4:
:41.650: I/DEBUG(124):     bee3e050 61d0e8d0 4007ddc0 40850d4c 407fad21  
:41.650: I/DEBUG(124):     bee3e060 4314c140 407faeb5 bee3e174 61cf3240  
:41.650: I/DEBUG(124):     bee3e070 bee3e074 4003eca0 41c5863c 3f800000  
:41.650: I/DEBUG(124):     bee3e080 00000000 00000000 00000000 00000000  
:41.650: I/DEBUG(124):     bee3e090 00000000 00000000 00000000 58c2fec0  
:41.650: I/DEBUG(124):     bee3e0a0 00000000 ffffffff 3f80a0cd 40800000  
:41.650: I/DEBUG(124):     bee3e0b0 05400101 58b4d958 00000000 000001c0  
:41.650: I/DEBUG(124):     bee3e0c0 634b6290 61d0e8d0 68445e30 00000000  
:41.650: I/DEBUG(124):     bee3e0d0 00000000 00000001 634b6200 2ba413d0  
:41.650: I/DEBUG(124):     bee3e0e0 00000009 61d0e8d0 634b6290 61d44ba0  
:41.650: I/DEBUG(124):     bee3e0f0 402dc288 00000000 61cf4248 61dad370  
:41.650: I/DEBUG(124):     bee3e100 bee3e1fc 40214977 61d0e8d0 00000009  
:41.650: I/DEBUG(124):     bee3e110 00000009 00000002 61d0e2a8 408701b0  
:41.650: I/DEBUG(124):     bee3e120 4314c110 00000000 40870518 4080ae5b  
:41.650: I/DEBUG(124):     bee3e130 4314c110 2ba413d0 bee3e154 00000001  
:41.650: I/DEBUG(124):     bee3e140 4314c120 00000000 4314c140 00000000  
:41.650: I/DEBUG(124): memory near r5:
:41.650: I/DEBUG(124):     bee3e054 4007ddc0 40850d4c 407fad21 4314c140  
:41.650: I/DEBUG(124):     bee3e064 407faeb5 bee3e174 61cf3240 bee3e074  
:41.650: I/DEBUG(124):     bee3e074 4003eca0 41c5863c 3f800000 00000000  
:41.650: I/DEBUG(124):     bee3e084 00000000 00000000 00000000 00000000  
:41.650: I/DEBUG(124):     bee3e094 00000000 00000000 58c2fec0 00000000  
:41.650: I/DEBUG(124):     bee3e0a4 ffffffff 3f80a0cd 40800000 05400101  
:41.650: I/DEBUG(124):     bee3e0b4 58b4d958 00000000 000001c0 634b6290  
:41.650: I/DEBUG(124):     bee3e0c4 61d0e8d0 68445e30 00000000 00000000  
:41.650: I/DEBUG(124):     bee3e0d4 00000001 634b6200 2ba413d0 00000009  
:41.650: I/DEBUG(124):     bee3e0e4 61d0e8d0 634b6290 61d44ba0 402dc288  
:41.650: I/DEBUG(124):     bee3e0f4 00000000 61cf4248 61dad370 bee3e1fc  
:41.650: I/DEBUG(124):     bee3e104 40214977 61d0e8d0 00000009 00000009  
:41.650: I/DEBUG(124):     bee3e114 00000002 61d0e2a8 408701b0 4314c110  
:41.650: I/DEBUG(124):     bee3e124 00000000 40870518 4080ae5b 4314c110  
:41.650: I/DEBUG(124):     bee3e134 2ba413d0 bee3e154 00000001 4314c120  
:41.650: I/DEBUG(124):     bee3e144 00000000 4314c140 00000000 61dc00bc  
:41.650: I/DEBUG(124): memory near r8:
:41.650: I/DEBUG(124):     61cf4228 41800000 41100000 41200000 0000002b  
:41.650: I/DEBUG(124):     61cf4238 00000001 00000012 ffffffff ffffffff  
:41.650: I/DEBUG(124):     61cf4248 001d0013 001b0017 004f0003 00490048  
:41.650: I/DEBUG(124):     61cf4258 ffff0057 0000002b 00000000 00000001  
:41.650: I/DEBUG(124):     61cf4268 00000002 00000003 00000004 00000005  
:41.650: I/DEBUG(124):     61cf4278 00000006 00000007 00000008 0000002b  
:41.650: I/DEBUG(124):     61cf4288 00000000 00000000 00000000 00000000  
:41.660: I/DEBUG(124):     61cf4298 00000000 00000000 00000000 00000000  
:41.660: I/DEBUG(124):     61cf42a8 00000028 0000001b 622b1a40 00000018  
:41.660: I/DEBUG(124):     61cf42b8 00000000 00000000 00000001 0000001b  
:41.660: I/DEBUG(124):     61cf42c8 622b4c28 00000006 00000000 00000000  
:41.660: I/DEBUG(124):     61cf42d8 00000025 0000001b 62244da0 0000000c  
:41.660: I/DEBUG(124):     61cf42e8 00000000 00000000 00000001 0000001b  
:41.660: I/DEBUG(124):     61cf42f8 61f7a318 000001ca 00000000 00000000  
:41.660: I/DEBUG(124):     61cf4308 00000001 0000001b 622b41e0 0000000e  
:41.660: I/DEBUG(124):     61cf4318 00000000 00000000 00000001 0000001b  
:41.660: I/DEBUG(124): memory near fp:
:41.660: I/DEBUG(124):     634b6270 40db0000 c1390000 40b28000 c1390000  
:41.660: I/DEBUG(124):     634b6280 40980000 c1298000 407c0000 0000014b  
:41.660: I/DEBUG(124):     634b6290 403d3418 00000001 00000000 00000000  
:41.660: I/DEBUG(124):     634b62a0 00000058 00000000 00000000 00000000  
:41.660: I/DEBUG(124):     634b62b0 634b62c8 61968648 0000006c 634b62c8  
:41.660: I/DEBUG(124):     634b62c0 00000001 634b62dc 61968648 00000000  
:41.660: I/DEBUG(124):     634b62d0 634b62dc 634b6348 634b6348 00000000  
:41.660: I/DEBUG(124):     634b62e0 634b62f4 634b631c 00000000 6837d660  
:41.660: I/DEBUG(124):     634b62f0 6837d660 3f800000 00000000 00000000  
:41.660: I/DEBUG(124):     634b6300 00000000 3f800000 00000000 00000000  
:41.660: I/DEBUG(124):     634b6310 00000000 3f800000 413a9d10 00000000  
:41.660: I/DEBUG(124):     634b6320 00000000 00000200 00000080 00000000  
:41.660: I/DEBUG(124):     634b6330 00000000 00000000 00000000 00000000  
:41.660: I/DEBUG(124):     634b6340 00000000 3f00a001 00000000 61ee9af8  
:41.660: I/DEBUG(124):     634b6350 00000000 c1048000 00000000 00000000  
:41.660: I/DEBUG(124):     634b6360 00000000 00000000 41144801 00000000  
:41.660: I/DEBUG(124): memory near ip:
:41.660: I/DEBUG(124):     61d0e8e0 00000000 00000000 00000000 00000000  
:41.660: I/DEBUG(124):     61d0e8f0 00000000 00000000 58c2fec0 00000000  
:41.660: I/DEBUG(124):     61d0e900 ffff0000 3f80a0cd 40800000 05400101  
:41.660: I/DEBUG(124):     61d0e910 58b4d958 00000000 000001ed 0000001b  
:41.660: I/DEBUG(124):     61d0e920 62298678 0000001a 00000000 00000000  
:41.660: I/DEBUG(124):     61d0e930 00000001 00000013 61db1150 6196a4b8  
:41.660: I/DEBUG(124):     61d0e940 688774d0 0000001b 4129beb8 4013fc94  
:41.660: I/DEBUG(124):     61d0e950 77656976 7365472e 65727574 00000053  
:41.660: I/DEBUG(124):     61d0e960 4003eca0 41f6e7cb 3f800000 00000000  
:41.660: I/DEBUG(124):     61d0e970 00000000 00000000 00000000 00000000  
:41.660: I/DEBUG(124):     61d0e980 00000000 00000000 62fe03b8 00000000  
:41.660: I/DEBUG(124):     61d0e990 ffffffff 3f80a0cd 40800000 05410101  
:41.660: I/DEBUG(124):     61d0e9a0 58b4d958 00000000 0000005a 00000033  
:41.660: I/DEBUG(124):     61d0e9b0 00000000 61dae720 00000000 00000000  
:41.660: I/DEBUG(124):     61d0e9c0 00000000 00000000 00000000 00000800  
:41.660: I/DEBUG(124):     61d0e9d0 00000200 00000080 00040006 0000004b  
:41.660: I/DEBUG(124): memory near sp:
:41.660: I/DEBUG(124):     bee3df88 634b6290 bee3e074 bee3e074 402f871c  
:41.660: I/DEBUG(124):     bee3df98 bee3e070 00000000 df0027ad 00000000  
:41.660: I/DEBUG(124):     bee3dfa8 00000000 00000000 61d44ba0 402dc324  
:41.660: I/DEBUG(124):     bee3dfb8 00000000 00000002 bee3e074 bee3e074  
:41.660: I/DEBUG(124):     bee3dfc8 00000009 00000000 bee3e070 40140228  
:41.660: I/DEBUG(124):     bee3dfd8 41f6e7cb 00000000 3f800000 61ee9b00  
:41.660: I/DEBUG(124):     bee3dfe8 634b62f4 6837d668 6837d668 634b6298  
:41.660: I/DEBUG(124):     bee3dff8 61ee9af8 00000000 00000000 00000000  
:41.660: I/DEBUG(124):     bee3e008 00000000 634b6290 00000000 00000000  
:41.660: I/DEBUG(124):     bee3e018 00000001 bee3e074 00000000 bee3e110  
:41.660: I/DEBUG(124):     bee3e028 40850d81 bee3e124 0000004c 407fbdeb  
:41.660: I/DEBUG(124):     bee3e038 bee3e05c bee3e15c bee3e064 bee3e164  
:41.660: I/DEBUG(124):     bee3e048 00000000 00000000 61d0e8d0 4007ddc0  
:41.660: I/DEBUG(124):     bee3e058 40850d4c 407fad21 4314c140 407faeb5  
:41.660: I/DEBUG(124):     bee3e068 bee3e174 61cf3240 bee3e074 4003eca0  
:41.660: I/DEBUG(124):     bee3e078 41c5863c 3f800000 00000000 00000000  
:41.660: I/DEBUG(124): code around pc:
:41.660: I/DEBUG(124):     010101e0 ffffffff ffffffff ffffffff ffffffff  
:41.660: I/DEBUG(124):     010101f0 ffffffff ffffffff ffffffff ffffffff  
:41.660: I/DEBUG(124):     01010200 ffffffff ffffffff ffffffff ffffffff  
:41.660: I/DEBUG(124):     01010210 ffffffff ffffffff ffffffff ffffffff  
:41.660: I/DEBUG(124):     01010220 ffffffff ffffffff ffffffff ffffffff  
:41.660: I/DEBUG(124):     01010230 ffffffff ffffffff ffffffff ffffffff  
:41.660: I/DEBUG(124):     01010240 ffffffff ffffffff ffffffff ffffffff  
:41.660: I/DEBUG(124):     01010250 ffffffff ffffffff ffffffff ffffffff  
:41.660: I/DEBUG(124):     01010260 ffffffff ffffffff ffffffff ffffffff  
:41.660: I/DEBUG(124):     01010270 ffffffff ffffffff ffffffff ffffffff  
:41.660: I/DEBUG(124):     01010280 ffffffff ffffffff ffffffff ffffffff  
:41.670: I/DEBUG(124):     01010290 ffffffff ffffffff ffffffff ffffffff  
:41.670: I/DEBUG(124):     010102a0 ffffffff ffffffff ffffffff ffffffff  
:41.670: I/DEBUG(124):     010102b0 ffffffff ffffffff ffffffff ffffffff  
:41.670: I/DEBUG(124):     010102c0 ffffffff ffffffff ffffffff ffffffff  
:41.670: I/DEBUG(124):     010102d0 ffffffff ffffffff ffffffff ffffffff  
:41.670: I/DEBUG(124): code around lr:
:41.670: I/DEBUG(124):     402dae08 e5940058 e3500000 0a000008 e590e000  
:41.670: I/DEBUG(124):     402dae18 e1a02005 e5941050 e59e3018 e12fff33  
:41.670: I/DEBUG(124):     402dae28 e3500000 03a0c001 05c4c068 08bd8070  
:41.670: I/DEBUG(124):     402dae38 e594005c e3500000 0a000007 e5903000  
:41.670: I/DEBUG(124):     402dae48 e1a01005 e1a02006 e593c008 e12fff3c  
:41.670: I/DEBUG(124):     402dae58 e5940058 e3500000 0a00000b e5845060  
:41.670: I/DEBUG(124):     402dae68 e1a00005 eb0083b5 e3500000 13a00000  
:41.670: I/DEBUG(124):     402dae78 03a00001 15840060 e8bd8070 e594205c  
:41.670: I/DEBUG(124):     402dae88 e1520000 1affffd7 e5945054 e3a01001  
:41.670: I/DEBUG(124):     402dae98 e5c41068 eafffff0 e2845004 e1a00005  
:41.670: I/DEBUG(124):     402daea8 eb0074e0 e5845000 eaffffd4 e92d45f8  
:41.670: I/DEBUG(124):     402daeb8 e3a05000 e3a07010 e1a04000 e1a08001  
:41.670: I/DEBUG(124):     402daec8 e1a02007 e1a01005 e58050b8 e28000c8  
:41.670: I/DEBUG(124):     402daed8 e3a0a001 ebff81cd e1a02007 e1a01005  
:41.670: I/DEBUG(124):     402daee8 e5c4a0d8 e28400dc ebff81c8 e5c4a0ec  
:41.670: I/DEBUG(124):     402daef8 e58450bc e2840020 e5c450c4 e58450c0  
:41.670: I/DEBUG(124): memory map around fault addr 01010200:
:41.670: I/DEBUG(124):     (no map below)
:41.670: I/DEBUG(124):     (no map for address)
:41.670: I/DEBUG(124):     40000000-40014000 

示例错误转储 #2:

:14.580: A/libc(1987): Fatal signal 11 (SIGSEGV) at 0x62fc4120 (code=2), thread 1987 (ootworks.swords)
:14.680: I/DEBUG(124): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
:14.680: I/DEBUG(124): Build fingerprint: 'google/nakasi/grouper:4.2.2/JDQ39/573038:user/release-keys'
:14.680: I/DEBUG(124): Revision: '0'
:14.680: I/DEBUG(124): pid: 1987, tid: 1987, name: ootworks.swords  >>> com.lootworks.swords <<<
:14.680: I/DEBUG(124): signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 62fc4120
:14.920: I/DEBUG(124):     r0 635cb3b8  r1 636d7498  r2 bee3e50c  r3 62fc4120
:14.920: I/DEBUG(124):     r4 bee3e508  r5 bee3e50c  r6 00000006  r7 00000010
:14.920: I/DEBUG(124):     r8 636e2f50  r9 00000000  sl 00000000  fp 636d7498
:14.920: I/DEBUG(124):     ip 00000000  sp bee3e440  lr 402dae28  pc 62fc4120  cpsr 28000010
:14.920: I/DEBUG(124):     d0  4080000040800000  d1  44801000433a8000
:14.920: I/DEBUG(124):     d2  0000000042ee0000  d3  0000000000000000
:14.920: I/DEBUG(124):     d4  c1b2f480c1aef480  d5  000000003f800000
:14.920: I/DEBUG(124):     d6  41e5100800000000  d7  42028804433e8000
:14.920: I/DEBUG(124):     d8  428700000000000e  d9  44a0000041e00000
:14.920: I/DEBUG(124):     d10 403fda0041e51008  d11 403827485a00b037
:14.920: I/DEBUG(124):     d12 438bbf244411d8e6  d13 403827485a00b037
:14.920: I/DEBUG(124):     d14 431e290841c13a43  d15 4336507243365050
:14.920: I/DEBUG(124):     d16 4050e00000000000  d17 3fe0000000000000
:14.920: I/DEBUG(124):     d18 4061000000000000  d19 0000000000000000
:14.920: I/DEBUG(124):     d20 0000000000000000  d21 3ff0000000000000
:14.920: I/DEBUG(124):     d22 8000000000000000  d23 0000000000000000
:14.920: I/DEBUG(124):     d24 0000000000000000  d25 8000000000000000
:14.920: I/DEBUG(124):     d26 3ff0000000000000  d27 0013001300130013
:14.920: I/DEBUG(124):     d28 0100010001000100  d29 0100010001000100
:14.920: I/DEBUG(124):     d30 0000000000000005  d31 0000000000000000
:14.920: I/DEBUG(124):     scr 20000093
:14.920: I/DEBUG(124): backtrace:
:14.920: I/DEBUG(124):     #00  pc 00001120  <unknown>
:14.920: I/DEBUG(124):     #01  pc 0005ce24  /system/lib/libskia.so (AutoDrawLooper::next(SkDrawFilter::Type)+96)
:14.920: I/DEBUG(124):     #02  pc 0005e320  /system/lib/libskia.so (SkCanvas::drawPosText(void const*, unsigned int, SkPoint const*, SkPaint const&)+152)
:14.920: I/DEBUG(124):     #03  pc 0006b975  /system/lib/libandroid_runtime.so
:14.920: I/DEBUG(124):     #04  pc 0006bb93  /system/lib/libandroid_runtime.so
:14.920: I/DEBUG(124):     #05  pc 0001e290  /system/lib/libdvm.so (dvmPlatformInvoke+112)
:14.920: I/DEBUG(124):     #06  pc 0004d411  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+396)
:14.920: I/DEBUG(124):     #07  pc 000276a0  /system/lib/libdvm.so
:14.920: I/DEBUG(124):     #08  pc 0002b57c  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
:14.920: I/DEBUG(124):     #09  pc 0005ff07  /system/lib/libdvm.so (dvmInvokeMethod(Object*, Method const*, ArrayObject*, ArrayObject*, ClassObject*, bool)+374)
:14.920: I/DEBUG(124):     #10  pc 000677e1  /system/lib/libdvm.so
:14.920: I/DEBUG(124):     #11  pc 000276a0  /system/lib/libdvm.so
:14.920: I/DEBUG(124):     #12  pc 0002b57c  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
:14.920: I/DEBUG(124):     #13  pc 0005fc31  /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+272)
:14.920: I/DEBUG(124):     #14  pc 000499fb  /system/lib/libdvm.so
:14.920: I/DEBUG(124):     #15  pc 00046871  /system/lib/libandroid_runtime.so
:14.920: I/DEBUG(124):     #16  pc 00047533  /system/lib/libandroid_runtime.so (android::AndroidRuntime::start(char const*, char const*)+390)
:14.920: I/DEBUG(124):     #17  pc 00000db7  /system/bin/app_process
:14.920: I/DEBUG(124):     #18  pc 0001271f  /system/lib/libc.so (__libc_init+38)
:14.920: I/DEBUG(124):     #19  pc 00000ae8  /system/bin/app_process
4

2 回答 2

2

解决了!问题是 UI 线程和 GL 线程都使用相同的 Paint 对象。我同步以防止争用,问题已解决。

于 2013-05-12T16:47:49.127 回答
1

我在无名的中国 OEM 手机上遇到了同样的问题。感谢 mwk 的提示,我能够将问题定位到已更新的 Paint 实例之一 [.setColor(..) ; .setShadowLayer(..); .setTextSize(..) ] 通过非 UI 线程。

我通过创建线程安全包装器来修复它,该包装器在每次需要更改属性之一时实例化新的 Paint 对象:

import android.graphics.Paint;
import android.graphics.Typeface;

import com.google.common.base.Preconditions;

public class ThreadSafePaint {

    private Paint delegate;

    public ThreadSafePaint(Paint delegate) {
        this.delegate = Preconditions.checkNotNull(delegate);
    }

    public Paint getPaint() {
        return delegate;
    }

    public void setAntiAlias(boolean aa) {
        delegate = new Paint(delegate);
        delegate.setAntiAlias(aa);
    }

    public Typeface setTypeface(Typeface typeface) {
        delegate = new Paint(delegate);
        return delegate.setTypeface(typeface);
    }


    public void setShadowLayer(float radius, float dx, float dy, int color) {
        delegate = new Paint(delegate);
        delegate.setShadowLayer(radius, dx, dy, color);
    }


    public int getColor() {
        return delegate.getColor();
    }

    public void setColor(int color) {
        delegate = new Paint(delegate);
        delegate.setColor(color);
    }

    public void setTextSize(float textSize) {
        delegate = new Paint(delegate);
        delegate.setTextSize(textSize);
    }

}
于 2014-02-04T15:03:56.937 回答