Table of Contents

Анализ crash на Android

Для crash в Native (Android) и Unity (Android) см. следующие инструкции.

Получение местоположения crash во время разработки

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

crash Android configuratio

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

crash Android stack

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

(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

Если code stack содержит данные, связанные с libEasyAR.so, это может означать, что crash связан с EasyAR. Если таких данных нет, с высокой вероятностью crash не связан с EasyAR.

Введите image dump sections libEasyAR.so в lldb, чтобы получить load address секции .text dynamic library, как показано ниже:

(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
...

Получение местоположения crash после релиза

Crash может возникнуть и после релиза.

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

crash Android debug

Если crash сложно воспроизвести, можно использовать crash reporting library, чтобы перехватывать информацию о crash приложения и отправлять ее на сервер. Но важно, чтобы информация о crash обязательно включала две части: code stack и module load address. Поскольку начиная с Android 4.0 была введена ASLR (address space layout randomization), load address модуля dynamic library может отличаться при каждом запуске, что приводит к динамическому изменению code address. Только зная относительное значение между code address в code stack и load address модуля dynamic library, можно понять, где произошел crash программы.

Если code stack содержит данные, связанные с libEasyAR.so, это может означать, что crash связан с EasyAR. Если таких данных нет, с высокой вероятностью crash не связан с EasyAR.

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

  • Номер версии EasyAR Sense и EasyAR Sense Unity Plugin

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

  • Community Edition / Enterprise Edition

  • Архитектура CPU

    aarch64/armeabi-v7a