Table of Contents

Análisis de bloqueos en Android

Para bloqueos en Native(Android) y Unity(Android), consulte las siguientes instrucciones.

Obtención de la ubicación de bloqueos durante el desarrollo

Al depurar programas Native de Android en Android Studio, es necesario cambiar Debugger - Debug type a Dual (Java+Native) en la configuración de Configuration.

crash Android configuratio

La información requerida al depurar en Android Studio se muestra en la siguiente imagen.

crash Android stack

Ingresando bt en lldb, se obtiene la causa del bloqueo y la pila de ejecución del código, como se muestra a continuación:

(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

Cuando la pila de ejecución contiene contenido relacionado con libEasyAR.so, puede indicar que el bloqueo está relacionado con EasyAR; si no está presente, existe una alta probabilidad de que el bloqueo no esté relacionado con EasyAR.

Ingresando image dump sections libEasyAR.so en lldb, se obtiene la dirección de carga de la sección .text de la biblioteca dinámica, como se muestra a continuación:

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

Obtención de la ubicación de bloqueos después del lanzamiento

Después del lanzamiento, también pueden ocurrir bloqueos.

Si se produce un bloqueo reproducible, se puede intentar utilizar la herramienta Profile/Debug integrada de Android Studio. Luego, siguiendo el procedimiento del desarrollo, se puede obtener la ubicación del bloqueo.

crash Android debug

Si se producen bloqueos difíciles de reproducir, se pueden utilizar algunas bibliotecas de informes de bloqueos para interceptar la información del bloqueo de la aplicación y reportarla al servidor. Sin embargo, es importante tener en cuenta que la información del bloqueo debe incluir obligatoriamente la pila de ejecución del código y las direcciones de carga de los módulos. Debido a que Android introdujo ASLR (distribución aleatoria del diseño del espacio de direcciones) a partir de la versión 4.0, la dirección de carga de los módulos de bibliotecas dinámicas puede variar en cada ejecución, lo que hace que las direcciones de código también cambien dinámicamente. Solo conociendo el valor relativo entre la dirección de código en la pila y la dirección de carga del módulo de la biblioteca dinámica, se puede determinar en qué ubicación ocurrió el bloqueo.

Cuando la pila de ejecución contiene contenido relacionado con libEasyAR.so, puede indicar que el bloqueo está relacionado con EasyAR; si no está presente, existe una alta probabilidad de que el bloqueo no esté relacionado con EasyAR.

Otra información relevante sobre bloqueos

  • Número de versión de EasyAR Sense y EasyAR Sense Unity Plugin

    Ejemplo: 4.7.0.11800-cf8e24e30

  • Community Edition/Enterprise Edition

  • Arquitectura de CPU

    aarch64/armeabi-v7a