本机 Android 崩溃:000218a8 /system/lib/libc.so (__futex_syscall3+8)

Native Android crash: 000218a8 /system/lib/libc.so (__futex_syscall3+8)

我的 android 应用程序收到以下崩溃报告:

我之前有过崩溃报告,它们都是关于我程序的源代码,但这次是本地崩溃。我很迷茫如何弄清楚出了什么问题。有人可以帮助我了解问题所在以及我如何读取堆栈跟踪以自己获取信息吗?

我认为这与密钥释放有关...?

   *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'oneplus/bacon/A0001:4.4.4/KTU84Q/XNPH05Q:user/release-keys'
Revision: '0'
pid: 21249, tid: 21249, name: .application.android >>> com.my.application.android <<<
signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
r0 838c7408 r1 00000080 r2 00000002 r3 00000000
r4 838c7408 r5 00000002 r6 00000000 r7 000000f0
r8 00000000 r9 838c7408 sl 41dbb3f8 fp 00000001
ip 00000000 sp bec11f90 lr 401056c4 pc 401188a8 cpsr 600a0010
d0 0000000000000000 d1 000000004432d59c
d2 000003f500000000 d3 0000000000000008
d4 fe8000003f000001 d5 000122e800000000
d6 0000000000000000 d7 4432d59c00000000
d8 0000000000000000 d9 3fe0000000000000
d10 0000000000000000 d11 0000000000000000
d12 0000000000000000 d13 0000000000000000
d14 0000000000000000 d15 0000000000000000
d16 ffffffffffffffff d17 00790061006c0050
d18 0000009ebdc4e22a d19 002e006900750067
d20 0061007200470049 d21 0063006900680070
d22 0066006600750042 d23 0072005000720065
d24 3f5243eca0000000 d25 8000000000000000
d26 3ff0000000000000 d27 bf95555560000000
d28 8000000000000000 d29 0000000000000000
d30 0000000000000000 d31 0000000000000000
scr 68000013

backtrace:
#00 pc 000218a8 /system/lib/libc.so (__futex_syscall3+8)
#01 pc 0000e6c0 /system/lib/libc.so
#02 pc 00055ac9 /system/lib/libdvm.so
#03 pc 00055fe9 /system/lib/libdvm.so (dvmLockObject+228)
#04 pc 00020d9c /system/lib/libdvm.so
#05 pc 00030ea4 /system/lib/libdvm.so (dvmMterpStd(Thread*)+76)
#06 pc 0002e508 /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
#07 pc 000635bd /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+336)
#08 pc 0004f765 /system/lib/libdvm.so
#09 pc 00053e75 /system/lib/libandroid_runtime.so
#10 pc 00067a69 /system/lib/libandroid_runtime.so (android::NativeInputEventReceiver::consumeEvents(_JNIEnv*, bool, long long, bool*)+368)
#11 pc 00067b4d /system/lib/libandroid_runtime.so (android::NativeInputEventReceiver::handleEvent(int, int, void*)+52)
#12 pc 000109ff /system/lib/libutils.so (android::Looper::pollInner(int)+474)
#13 pc 00010aad /system/lib/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+92)
#14 pc 0006ed5d /system/lib/libandroid_runtime.so (android::NativeMessageQueue::pollOnce(_JNIEnv*, int)+22)
#15 pc 000204d0 /system/lib/libdvm.so (dvmPlatformInvoke+116)
#16 pc 0005118f /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+398)
#17 pc 00000214 /dev/ashmem/dalvik-jit-code-cache (deleted)

code around pc:
40118888 e5900000 e2601000 e0100001 116f0f10
40118898 12600020 e12fff1e e1a0c007 e3a070f0
401188a8 ef000000 e1a0700c e12fff1e eafffff9
401188b8 e1a0c007 e1a03002 e1a02001 e3a01000
401188c8 e3a070f0 ef000000 e1a0700c e12fff1e
401188d8 e1a0c007 e1a02001 e3a01001 e3a070f0
401188e8 ef000000 e1a0700c e12fff1e e1a0000d
401188f8 e12fff1e e92d50f0 e3a07025 ef000000
40118908 e8bd50f0 e3700a01 912fff1e e2600000
40118918 ea006f6a f5d0f000 f5d1f000 e1500001
40118928 13520000 03a00000 012fff1e e1a03000
40118938 e352000c 5a000008 f5d0f020 f5d1f020
40118948 e0d300b2 e0d1c0b2 e050000c 112fff1e
40118958 e2522001 1afffff9 e12fff1e e92d4010
40118968 e3130002 0a000005 e0d300b2 e0d1c0b2
40118978 e2422001 e050000c 18bd4010 112fff1e

code around lr:
401056a4 01841f90 e3510000 1afffff9 e1560003
401056b4 13865002 1a000001 ea000009 ebffff74
401056c4 e194cf9f e1843f95 e3530000 e1a00004
401056d4 e1a01006 e1a02005 1afffff8 e156000c
401056e4 1afffff5 f57ff05b e3a00000 e8bd81f0
401056f4 e3a00016 e8bd81f0 fa001211 e5903020
40105704 e1530825 0a000025 e1867007 e1a0c803
40105714 e1550007 0a000033 e38c0002 e1808007
40105724 ea000012 e2053003 e3530001 1a000009
40105734 e225c003 e1942f9f e3a0e000 e1320005
40105744 0184ef9c e35e0000 1afffff9 e1550002
40105754 01a0500c 1a000004 e1a02005 e1a00004
40105764 e1a01006 e3a03000 ebffff49 e5945000
40105774 e1550007 1affffea e1941f9f e3a00000
40105784 e1310007 01840f98 e3500000 1afffff9
40105794 e1570001 1afffff4 f57ff05b e8bd81f0 

从堆栈跟踪来看,它似乎在 Dalvik VM 内部崩溃。您没有包括完整的崩溃报告,它会显示错误地址和 Android 的版本,但它在 dvmLockObject() 中的事实表明托管堆已损坏。

堆损坏通常是由本机代码库引起的。可能很难追踪到,因为崩溃不一定发生在腐败附近。

更新: 使用完整的本机故障转储,情况似乎大不相同。线程因 SIGABRT 而崩溃,这通常发生在某些事情(如 assert() 或对 free() 的失败调用)调用 abort() 时。但是,堆栈跟踪显示代码位于 futex 系统调用中——futex 为 pthread 互斥锁等 libc 功能提供基础——并且 futex 系统调用不会导致 SIGABRT。

我的猜测是其他线程导致了信号 6。您会注意到 pid 和 tid 具有相同的值 (21249),这意味着这是应用程序的主线程,并且是将捕获 kill().

发送给进程的信号

Android 的 abort() 用于取消引用 0xdeadbaad 以确保失败的线程出现在堆栈跟踪中。这在最近的版本中已更改为发送带有 tgkill() 的 SIGABRT,这应确保正确的线程接收到信号。因此,要么该机制不起作用,要么其他一些代码正在发送 SIGABRT,可能使用 kill().

如果您有完整的 logcat 输出,您可能会在崩溃日志开始之前看到某种故障指示。