Table of Contents

Анализ сбоев на android

Инструкции по сбоям для нативных приложений (Android) и Unity (Android) приведены ниже.

Получение информации о месте сбоя во время разработки

При отладке нативных программ Android в Android Studio необходимо изменить тип отладки в настройках Configuration на Dual (Java + Native) в разделе Debugger.

crash Android configuratio

Информация, необходимая при отладке в Android Studio, показана на рисунке ниже.

crash Android stack

Введя bt в lldb, можно получить причину сбоя и стек вызовов, как показано ниже:

(lldb) bt
* thread #16, name = 'samples.helloar', stop reason = signal SIGSEGV: invalid address (fault address: 0x9c40)
* frame #0: 0x0000004922f3a1d8 libEasyAR.so`___lldb_unnamed_symbol3056$$libEasyAR.so + 6088
    frame #1: 0x0000004922f38568 libEasyAR.so`___lldb_unnamed_symbol3054$$libEasyAR.so + 288
    frame #2: 0x0000004922f347f8 libEasyAR.so`___lldb_unnamed_symbol2876$$libEasyAR.so + 332
    frame #3: 0x00000049be2390c8 libc.so`__pthread_start(void*) + 40
    frame #4: 0x00000049be1f04f8 libc.so`__start_thread + 72

Если содержимое, связанное с libEasyAR.so, присутствует в стеке вызовов, это может указывать на связь сбоя с EasyAR; если отсутствует, высока вероятность, что сбой не связан с EasyAR.

Введя image dump sections libEasyAR.so в lldb, можно получить адрес загрузки секции .text динамической библиотеки, как показано ниже:

(lldb) image dump sections libEasyAR.so
...
  SectID     Type             Load Address                             Perm File Off.  File Size  Flags      Section Name
...
  0x00000010 code             [0x0000004922e30cfc-0x0000004923654558)  r-x  0x00256cfc 0x0082385c 0x00000006 libEasyAR.so..text
...

Получение информации о месте сбоя после выпуска

Сбои также могут возникать после выпуска приложения.

При возникновении воспроизводимого сбоя можно попробовать использовать встроенные инструменты Profile/Debug в Android Studio. Затем следуйте действиям, описанным для этапа разработки, чтобы определить место сбоя.

crash Android debug

При возникновении трудно воспроизводимого сбоя можно использовать библиотеки отчетов о сбоях для перехвата информации о сбое приложения и отправки ее на сервер. Однако важно отметить, что информация о сбое обязательно должна включать стек вызовов и адреса загрузки модулей. Поскольку Android, начиная с версии 4.0, внедрил ASLR (рандомизацию адресного пространства), адрес загрузки модулей динамической библиотеки может меняться при каждом запуске, что приводит к динамическому изменению адресов кода. Только зная относительное значение адреса кода в стеке вызовов и адреса загрузки модуля динамической библиотеки, можно определить, в каком месте программы произошел сбой.

Если содержимое, связанное с libEasyAR.so, присутствует в стеке вызовов, это может указывать на связь сбоя с EasyAR; если отсутствует, высока вероятность, что сбой не связан с EasyAR.

Другая информация, связанная со сбоями

  • Версия EasyAR Sense и EasyAR Sense Unity Plugin

    Например, 4.7.0.11800-cf8e24e30

  • Community Edition/Enterprise Edition

  • Архитектура ЦП

    aarch64/armeabi-v7a