Table of Contents

Análise de crash no Android

Para crashes em Native (Android) e Unity (Android), consulte as instruções a seguir.

Obter locais de crash durante o desenvolvimento

Ao depurar um programa Android Native no Android Studio, é necessário alterar Debugger - Debug type para Dual (Java + Native) nas configurações de Configuration.

crash Android configuratio

As informações necessárias ao depurar no Android Studio são mostradas abaixo.

crash Android stack

Digite bt no lldb para obter a causa do crash e o code stack, como abaixo:

(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

Quando o code stack contém conteúdo relacionado a libEasyAR.so, isso pode indicar que o crash está relacionado ao EasyAR. Caso contrário, há uma grande probabilidade de que o crash não esteja relacionado ao EasyAR.

Digite image dump sections libEasyAR.so no lldb para obter a load address da seção .text na dynamic library, como abaixo:

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

Obter locais de crash após o release

Crashes também podem ocorrer após o release.

Se ocorrer um crash reproduzível, você pode tentar usar a ferramenta Profile/Debug integrada ao Android Studio. Em seguida, siga o método usado durante o desenvolvimento para obter o local do crash.

crash Android debug

Se o crash for difícil de reproduzir, você pode usar uma crash reporting library para interceptar as informações de crash da aplicação e reportá-las ao servidor. No entanto, observe que as informações de crash devem incluir tanto o code stack quanto a module load address. Como o Android introduziu ASLR (address space layout randomization) a partir da versão 4.0, a load address do módulo dynamic library pode ser diferente a cada execução, fazendo com que a code address também mude dinamicamente. Somente conhecendo o valor relativo entre a code address no code stack e a load address do módulo dynamic library é possível saber onde o programa sofreu crash.

Quando o code stack contém conteúdo relacionado a libEasyAR.so, isso pode indicar que o crash está relacionado ao EasyAR. Caso contrário, há uma grande probabilidade de que o crash não esteja relacionado ao EasyAR.

Outras informações relacionadas a crash

  • Número da versão do EasyAR Sense e EasyAR Sense Unity Plugin

    Por exemplo, 4.7.0.11800-cf8e24e30

  • Community Edition / Enterprise Edition

  • Arquitetura CPU

    aarch64/armeabi-v7a