Table of Contents

Analisi dei crash su Android

Per i crash su Native (Android) e Unity (Android), fare riferimento alle seguenti istruzioni.

Ottenere le posizioni dei crash durante lo sviluppo

Quando si esegue il debug di un programma Android Native in Android Studio, nelle impostazioni Configuration è necessario impostare Debugger - Debug type su Dual (Java + Native).

crash Android configuratio

Le informazioni necessarie durante il debug in Android Studio sono mostrate di seguito.

crash Android stack

Inserire bt in lldb per ottenere la causa del crash e il code stack, come segue:

(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 il code stack contiene contenuti relativi a libEasyAR.so, può indicare che il crash è correlato a EasyAR. Se non li contiene, è molto probabile che il crash non sia correlato a EasyAR.

Inserire image dump sections libEasyAR.so in lldb per ottenere la load address della sezione .text nella dynamic library, come segue:

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

Ottenere le posizioni dei crash dopo il release

I crash possono verificarsi anche dopo il release.

Se si verifica un crash riproducibile, puoi provare a usare lo strumento Profile/Debug integrato in Android Studio. Quindi seguire il metodo usato durante lo sviluppo per ottenere la posizione del crash.

crash Android debug

Se un crash è difficile da riprodurre, puoi usare una crash reporting library per intercettare le informazioni di crash dell'applicazione e inviarle a un server. Tuttavia, le informazioni di crash devono includere sia il code stack sia la module load address. Poiché Android ha introdotto ASLR (address space layout randomization) a partire dalla 4.0, la load address del modulo dynamic library può essere diversa a ogni esecuzione, causando variazioni dinamiche anche della code address. Solo conoscendo il valore relativo tra la code address nel code stack e la load address del modulo dynamic library è possibile sapere dove si è verificato il crash del programma.

Quando il code stack contiene contenuti relativi a libEasyAR.so, può indicare che il crash è correlato a EasyAR. Se non li contiene, è molto probabile che il crash non sia correlato a EasyAR.

Altre informazioni relative ai crash

  • Numero di versione di EasyAR Sense e EasyAR Sense Unity Plugin

    Ad esempio, 4.7.0.11800-cf8e24e30

  • Community Edition / Enterprise Edition

  • Architettura CPU

    aarch64/armeabi-v7a