Table of Contents

Analisi dei crash su Android

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

Ottenere la posizione del crash durante lo sviluppo

Quando si esegue il debug di programmi nativi Android in Android Studio, è necessario modificare Debugger - Debug type in Dual (Java + Native) nelle impostazioni di Configuration.

configurazione crash android

Le informazioni necessarie durante il debug in Android Studio sono mostrate nella figura seguente.

stack crash android

In lldb, digitare bt per ottenere la causa del crash e il call 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 nel call stack sono presenti contenuti relativi a libEasyAR.so, potrebbe indicare che il crash è correlato a EasyAR; se non presenti, è probabile che il crash non sia correlato a EasyAR.

In lldb, digitare image dump sections libEasyAR.so per ottenere l'indirizzo di caricamento della sezione .text della libreria dinamica, 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 la posizione del crash dopo il rilascio

Dopo il rilascio, potrebbero verificarsi anche crash.

Se si verifica un crash riproducibile, è possibile utilizzare lo strumento Profile/Debug integrato in Android Studio. Quindi, seguendo l'approccio durante lo sviluppo, è possibile ottenere la posizione del crash.

debug crash android

Se si verifica un crash difficile da riprodurre, è possibile utilizzare alcune librerie di report crash per intercettare le informazioni sul crash dell'applicazione e segnalarle al server. Tuttavia, è importante notare che le informazioni sul crash devono includere il call stack e gli indirizzi di caricamento dei moduli. Dato che Android ha introdotto ASLR (Address Space Layout Randomization) dalla versione 4.0, gli indirizzi di caricamento dei moduli di librerie dinamiche possono variare ad ogni esecuzione, causando anche cambiamenti dinamici negli indirizzi di codice. Solo conoscendo il valore relativo tra l'indirizzo di codice nello stack e l'indirizzo di caricamento del modulo della libreria dinamica, è possibile determinare dove si è verificato il crash.

Quando nel call stack sono presenti contenuti relativi a libEasyAR.so, potrebbe indicare che il crash è correlato a EasyAR; se non presenti, è probabile che il crash non sia correlato a EasyAR.

Altre informazioni correlate al crash

  • Versione di EasyAR Sense e EasyAR Sense Unity Plugin

    Ad esempio 4.7.0.11800-cf8e24e30

  • Edizione Community/Enterprise

  • Architettura CPU

    aarch64/armeabi-v7a