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