Как проанализировать журнал сбоев в boot.oat?( 'LinkToDeath(): получатель должен быть не NULL')
Сбой приложения происходит при переключении пользователя 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)
Мой анализ:
- arm-linux-androideabi-addr2line -C -e../tmp/libaudioeffect_jni.so 00002595
рамки / база / СМИ / JNI / audioeffect / android_media_AudioEffect.cpp: 355
- arm-linux-androideabi-addr2line -C -e../tmp/libmedia.so 000943ed
рамки / ау / СМИ / libmedia / AudioEffect.cpp: 88
arm-linux-androideabi-addr2line -C -e../tmp/libmedia.so 0009426f
рамки / ау / СМИ / libmedia / AudioEffect.cpp: 158
IInterface: asBinder (IEffect) -> linkToDeath (mIEffectClient);
Вопрос:
Это правильно для меня, чтобы сбросить файл овса?
Это все четное число адресов oatdump (зачем показывать здесь 02affcd3? Это же нечетное число)
Как мы можем вытащить файл овса, который был проанализирован в папке устройств Android?
Что вы предлагаете по этому вопросу?
1 ответ
Не существует единого способа анализа аварийных дампов. Каждый из них уникален и требует индивидуального подхода. Тем не менее, есть один общий шаг - преобразование адресов обратной линии в строки / числа. Вы сделали это с addr2line
, Это немного утомительно и сделать вещи проще, вы можете использовать ndk-stack
, Это делает абсолютно то же самое, но более удобным способом.
Вернемся к аварии. как мы видим, проблема в коде фреймворка, а не в вашем приложении. На самом деле это утверждение, которое было брошено BpBinder::linkToDeath()
, Я думаю, это своего рода ошибка в системе, и вы ничего не можете с этим поделать. Еще одна причина относиться к ней как к системной ошибке - это тот факт, что BpBinder
метод был вызван из android::AudioEffect
учебный класс. Фактическая реализация аудиоэффекта предоставляется поставщиком, и, вероятно, этот механизм связывания использовался для связи между общим кодом и реализацией для конкретного устройства. Такие реализации могут быть недостаточно хорошо протестированы или рассмотрены, поскольку над ним работает гораздо меньше людей, чем над общим кодом для нескольких устройств.
Чтобы выяснить, что это не связано с вашим кодом, создайте минимальное приложение, которое использует звуковые эффекты аналогично вашему, и попытайтесь воспроизвести проблему, переключаясь между пользователями.