Cómo depurar y analizar los Tomstones que ocurren en Android
Los siguientes tres tipos de problemas son más probables que ocurran en Android: Forzar cierre / ANR / Tombstone
Los dos primeros son principalmente para verificar el estado y la pila del proceso actual o Después del análisis de la capa de marco del sistema, este artículo analiza principalmente la situación de Tombstone.
Los Tombstones generalmente son causados por errores de Dalvik, depuradores de monitoreo de estado, código de capa C y algunos problemas con libc.
Cuando ocurre un desecho en el sistema, el kernel primero informará una señal de advertencia grave (señal). Después de que la capa superior la reciba, la herramienta de depuración del proceso guardará la pila de llamadas actual en el proceso. en el sitio y guárdelo en el sistema. El sistema crea el directorio de datos/lápidas y escribe la información del proceso cuando ocurre la excepción en este directorio. Los desarrolladores necesitan analizar todo el proceso de llamada a través de la pila de llamadas para descubrir el punto del problema.
Herramientas básicas:
prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin
Lea atentamente la reunión de ensamblaje durante el análisis Obtenga más información útil cuando ocurre una excepción.
1.arm-eabi-addr2line traduce valores hexadecimales de la pila de llamadas similares a libxxx.so 0x00012345 en nombres de archivos y nombres de funciones
arm-eabi-addr2line -e libxxx.so 0x00012345
2.arm-eabi-nm enumera la información de símbolos del archivo
arm-eabi-nm -l -C -n -S libdvm.so > dvm.data< / p>
3.arm-eabi-objdump enumera la información detallada del archivo
arm-eabi-objdump -C -d libc.so > libc.s
Pase lo anterior A través del análisis de herramientas, podemos obtener una pila de llamadas y un código ensamblador más completo de la lógica de llamada.
Luego, debe combinar el conocimiento de la arquitectura ARM y el ensamblaje de ARM (en algunos casos es posible que necesite usar gdb)
Para analizar las razones de la aparición de lápidas, lo siguiente son algunas lápidas que he encontrado Situación:
1. Puntero de función no válido: el puntero es NULL o ha sido reasignado
2. se destruye
3.Operación de ARCHIVO: debido a que stdio no es seguro para subprocesos, es probable que se produzcan excepciones durante operaciones de subprocesos múltiples.
Los principales archivos lógicos para el procesamiento de desecho involucrados en este artículo son los siguientes:
BootReceiver.java -- frameworks\base\services\java\com\android\server
Debuggerd.c -- system\core\debuggerd
ThreadLocal.java -- libcore\luni\src\main\java\java\lang