Android 如何分析boot.oat崩溃日志?(';linkToDeath():收件人必须为非NULL';)

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 : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *

应用程序崩溃发生在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.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堆栈
。当然,它们必须包含调试数据。从另一方面来说,这没有好处。