Red de conocimiento informático - Conocimiento informático - Cómo depurar y analizar Tombstone en Android

Cómo depurar y analizar Tombstone en Android

Cómo depurar y analizar Tombstone en Android

Android es propenso a sufrir los siguientes tres problemas: apagado forzado/ANR/tombstone

Los dos primeros sirven principalmente para ver el estado del proceso actual O la capa y la pila del marco del sistema se pueden analizar básicamente. Este artículo analiza principalmente la situación de las lápidas.

Los Tombstones generalmente son causados ​​por errores de Dalvik, monitoreo del estado del depurador, código de nivel C y ciertos problemas en libc.

Cuando ocurre un evento lápida en el sistema, el núcleo primero informará una señal de advertencia grave y la capa superior recibirá la señal. La herramienta de depuración del proceso guardará la pila de llamadas del proceso y escribirá la. Procese la información en el directorio de datos/lápidas creado por el sistema, donde los desarrolladores necesitan ver la pila de llamadas. Los desarrolladores deben analizar todo el flujo de llamadas a través de la pila de llamadas para descubrir qué salió mal.

Herramientas básicas:

prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin

Lea atentamente el ensamblaje durante el análisis y proporciona para obtener más información útil sobre cuándo ocurrió la excepción.

1. arm-eabi-addr2line convierte valores hexadecimales de la pila de llamadas como libxxx.so 0x00012345 en nombres de archivos y funciones

arm-eabi-addr2line -e libxxx.so 0x00012345

2. arm-eabi-nm enumera la información del símbolo del archivo

arm-eabi-nm -l -C -n -S libdvm.so gt;

3. arm-eabi-objdump enumera información detallada del archivo

arm-eabi-objdump -C -d libc.s

A través del análisis de las herramientas anteriores, podemos obtener una pila de llamadas más completa y un código ensamblador de lógica de llamadas.

En este momento, debe combinar el conocimiento de la arquitectura ARM y el ensamblaje de ARM (en algunos casos puede ser necesario gdb)

Analice las razones de los desecho. Las siguientes son algunas situaciones de desecho. el autor encontró:

1. Puntero de función no válido: el puntero es NULL o ha sido reasignado

2. strlen: el puntero es NULL o ha sido reasignado.

2. Fallo de strlen: resulta en información de pila incompleta y destrucción de la pila

3. Operación de ARCHIVO: debido a que stdio no es seguro para subprocesos, las operaciones de subprocesos múltiples son propensas a excepciones.

Los principales archivos lógicos para procesar lápidas en este artículo son los siguientes:

BootReceiver.java -- frameworks\base\services\java\comandroid/server

Debuggerd.c -- system\core\debuggerd

ThreadLocal.java -- libcore\luni\src\main\java\javalang