Table of Contents

Análise de crash no android

Sobre crashes nativos(android) e unity(android), consulte as instruções abaixo.

Localização de crash durante o desenvolvimento

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

crash Android configuratio

As informações necessárias durante a depuração no Android Studio são mostradas na figura abaixo.

crash Android stack

Digite bt no lldb para obter a causa do crash e a stack de execução do código, conforme 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 conteúdo relacionado a libEasyAR.so existe na stack de execução do código, pode indicar que o crash está relacionado ao EasyAR; se não existir, há uma maior probabilidade de o crash não estar relacionado ao EasyAR.

Digite image dump sections libEasyAR.so no lldb para obter o endereço de carregamento da seção .text da biblioteca dinâmica, conforme 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
...

Localização de crash após a publicação

Após a publicação, também podem ocorrer crashes.

Se ocorrer um crash reproduzível, tente usar as ferramentas Profile/Debug integradas do Android Studio. Em seguida, siga o procedimento do desenvolvimento para obter a localização do crash.

crash Android debug

Se ocorrerem crashes difíceis de reproduzir, podem ser usadas bibliotecas de relatórios de crash para interceptar informações de crash do aplicativo e reportá-las ao servidor. Porém, é importante notar que as informações de crash devem incluir necessariamente duas partes: a stack de execução do código e os endereços de carregamento dos módulos. Como o ASLR (address space layout randomization) foi introduzido no Android a partir da versão 4.0, o endereço de carregamento do módulo de biblioteca dinâmica pode variar a cada execução, causando mudanças dinâmicas nos endereços de código. Somente conhecendo o valor relativo entre o endereço de código na stack e o endereço de carregamento do módulo de biblioteca dinâmica é possível determinar onde o programa travou.

Quando o conteúdo relacionado a libEasyAR.so existe na stack de execução do código, pode indicar que o crash está relacionado ao EasyAR; se não existir, há uma maior probabilidade de o crash não estar relacionado ao EasyAR.

Outras informações relacionadas a crash

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

    Exemplo: 4.7.0.11800-cf8e24e30

  • Community Edition/Enterprise Edition

  • Arquitetura da CPU

    aarch64/armeabi-v7a