Android 如何分析boot.oat崩溃日志?(';linkToDeath():收件人必须为非NULL';)
应用程序崩溃发生在Android用户从所有者切换到来宾的过程中 堆芯碰撞日志如下所示:Android 如何分析boot.oat崩溃日志?(';linkToDeath():收件人必须为非NULL';),android,android-ndk,crash-dumps,Android,Android Ndk,Crash Dumps,应用程序崩溃发生在Android用户从所有者切换到来宾的过程中 堆芯碰撞日志如下所示: 08-12 23:46:03.724 27197 27197 F libc : Fatal signal 6 (SIGABRT), code -6 in tid 27197 (com.dolby) 08-12 23:46:03.855 312 312 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *
08-12 23:46:03.724 27197 27197 F libc : Fatal signal 6 (SIGABRT), code -6 in tid 27197 (com.dolby)
08-12 23:46:03.855 312 312 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
08-12 23:46:03.888 312 312 F DEBUG : Build fingerprint: 'Lenovo/TB-X103F/TB-X103F:6.0.1/LenovoTB-X103F/TB-X103F_S000013_160813_ROW:user/release-keys'
08-12 23:46:03.889 312 312 F DEBUG : Revision: '0'
08-12 23:46:03.889 312 312 F DEBUG : ABI: 'arm'
08-12 23:46:03.893 312 312 F DEBUG : pid: 27197, tid: 27197, name: com.dolby >>> com.dolby <<<
08-12 23:46:03.893 312 312 F DEBUG : signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
08-12 23:46:03.940 312 312 F DEBUG : Abort message: 'linkToDeath(): recipient must be non-NULL'
08-12 23:46:03.941 312 312 F DEBUG : r0 00000000 r1 00006a3d r2 00000006 r3 b6fadb7c
08-12 23:46:03.942 312 312 F DEBUG : r4 b6fadb84 r5 b6fadb34 r6 00000002 r7 0000010c
08-12 23:46:03.942 312 312 F DEBUG : r8 00000000 r9 00000000 sl 00000000 fp b7226ccc
08-12 23:46:03.942 312 312 F DEBUG : ip 00000006 sp be9062f0 lr b6d2ed85 pc b6d31174 cpsr 400f0010
08-12 23:46:03.993 312 312 F DEBUG :
08-12 23:46:03.993 312 312 F DEBUG : backtrace:
08-12 23:46:03.993 312 312 F DEBUG : #00 pc 00044174 /system/lib/libc.so (tgkill+12)
08-12 23:46:03.994 312 312 F DEBUG : #01 pc 00041d81 /system/lib/libc.so (pthread_kill+32)
08-12 23:46:03.994 312 312 F DEBUG : #02 pc 0001ba2f /system/lib/libc.so (raise+10)
08-12 23:46:03.995 312 312 F DEBUG : #03 pc 00018be1 /system/lib/libc.so (__libc_android_abort+34)
08-12 23:46:03.995 312 312 F DEBUG : #04 pc 000167a8 /system/lib/libc.so (abort+4)
08-12 23:46:03.995 312 312 F DEBUG : #05 pc 0000864b /system/lib/libcutils.so (__android_log_assert+86)
08-12 23:46:03.996 312 312 F DEBUG : #06 pc 0001a823 /system/lib/libbinder.so (_ZN7android8BpBinder11linkToDeathERKNS_2spINS_7IBinder14DeathRecipientEEEPvj+86)
08-12 23:46:03.997 312 312 F DEBUG : #07 pc 0009426f /system/lib/libmedia.so (_ZN7android11AudioEffect3setEPK13effect_uuid_sS3_iPFviPvS4_ES4_ii+530)
08-12 23:46:03.997 312 312 F DEBUG : #08 pc 000943ed /system/lib/libmedia.so (_ZN7android11AudioEffectC2EPKcRKNS_8String16ES2_iPFviPvS6_ES6_ii+156)
08-12 23:46:03.998 312 312 F DEBUG : #09 pc 00002595 /system/lib/libaudioeffect_jni.so
08-12 23:46:03.998 312 312 F DEBUG : #10 pc 02affcd3 /system/framework/arm/boot.oat (offset 0x1ef2000)
08-12 23:46:03.724 27197 F libc:致命信号6(SIGABRT),tid 27197中的代码-6(com.dolby)
08-12 23:46:03.855 312 F调试:************************************************
08-12 23:46:03.888 312 F调试:构建指纹:“Lenovo/TB-X103F/TB-X103F:6.0.1/LenovoTB-X103F/TB-X103F\u S000013\u 160813\u行:用户/释放密钥”
08-12 23:46:03.889 312 F调试:修订版:“0”
08-12 23:46:03.889 312 F调试:ABI:“arm”
08-12 23:46:03.893 312 F DEBUG:pid:27197,tid:27197,name:com.dolby>>>com.dolby分析崩溃转储没有单一方法。每一个都是独特的,需要单独处理。然而,有一个常见的步骤-将回溯地址转换为行/数。您是用addr2line
完成的。这是一个有点乏味,使事情更容易,你可以使用。它的功能完全相同,但更方便
让我们回到崩溃。正如我们看到的,问题出在框架代码的某个地方,而不是你的应用程序中。实际上,这是由BpBinder::linkToDeath()
抛出的断言。我猜这是系统中的一种缺陷,你对此无能为力。将其视为系统错误的另一个原因是BpBinder
的方法是从android::AudioEffect
类调用的。实际的音频效果实现是由供应商提供的,可能该绑定器用于在通用代码和特定于设备的实现之间进行通信。这种实现可能没有经过很好的测试或审查,因为使用它的人比使用通用的、跨设备的代码的人少得多
要找出它与您的代码无关,请创建以类似于您的方式使用音频效果的最小应用程序,并尝试通过在用户之间切换来重现问题。没有单一方法来分析崩溃转储。每一个都是独特的,需要单独处理。然而,有一个常见的步骤-将回溯地址转换为行/数。您是用addr2line
完成的。这是一个有点乏味,使事情更容易,你可以使用。它的功能完全相同,但更方便
让我们回到崩溃。正如我们看到的,问题出在框架代码的某个地方,而不是你的应用程序中。实际上,这是由BpBinder::linkToDeath()
抛出的断言。我猜这是系统中的一种缺陷,你对此无能为力。将其视为系统错误的另一个原因是BpBinder
的方法是从android::AudioEffect
类调用的。实际的音频效果实现是由供应商提供的,可能该绑定器用于在通用代码和特定于设备的实现之间进行通信。这种实现可能没有经过很好的测试或审查,因为使用它的人比使用通用的、跨设备的代码的人少得多
要找出它与您的代码无关,请创建以类似于您的方式使用音频效果的最小应用程序,并尝试通过在用户之间切换来重现问题。谢谢您的回答。是的,我知道没有单一的方法来分析崩溃转储。无论如何,我想将崩溃转储地址转换为行/数。我对如何转换oat文件感到困惑的是什么?例如`02affcd3/system/framework/arm/boot.oat(偏移量0x1ef2000)`@caopeng oat文件是常规ELF文件,因此您可以使用与相同的方法。因此
文件,用于addr2line
和ndk堆栈
。当然,它们必须包含调试数据。从另一方面来说,这并没有什么好处。谢谢你们的回答。是的,我知道并没有单一的方法来分析崩溃转储。无论如何,我想将崩溃转储地址转换为行/数。我对如何转换oat文件感到困惑的是什么?例如`02affcd3/system/framework/arm/boot.oat(偏移量0x1ef2000)`@caopeng oat文件是常规ELF文件,因此您可以使用与相同的方法。因此
文件,用于addr2line
和ndk堆栈
。当然,它们必须包含调试数据。从另一方面来说,这没有好处。