Introducción a Android malloc_debug
malloc_debug incluye principalmente las siguientes funciones:
2) Admite límites de memoria, que pueden agregar protección, verificación de memoria fuera de límites, uso después del lanzamiento y verificación de fallas de memoria en el La cabeza y la cola de las aplicaciones de memoria esperan.
3) Admite límites de memoria, puede agregar medidas de protección, comprobaciones de memoria fuera de límites, uso después de inactividad, comprobaciones de fallos de memoria, etc. al principio y al final de las aplicaciones de memoria.
3) Seguimiento e impresión de la pila de llamadas, mientras rastrea la asignación de memoria, guarde la pila de llamadas de asignación de memoria para facilitar la detección de pérdidas de memoria.
1) Habilite malloc_debug
adb shell setprop libc.debug.malloc.program
libc llamará a MallocInitImpl durante la inicialización para determinar los atributos para cargar la depuración, por lo que Llamar a InitMallocFunctions reemplaza las funciones nativas de asignación y desasignación de memoria de Libc.
Además de la asignación y liberación de memoria, las situaciones comunes son las siguientes:
Por ejemplo, después de completar el registro, llame a FinishInstallHooks, la inicialización y el registro finalizan para manejar la salida.
1) Comprobación de límites de memoria
front_guard[=SIZE_BYTES] permite colocar pequeños buffers antes de los datos asignados.
guard[=SIZE_BYTES] habilita tanto guardia como guardia en todas las asignaciones.
El principio fundamental es agregar un dato como límite al principio y al final de la memoria asignada. El principio se inicializa en 0xaa y el final se inicializa en 0xbb.
2) Función de pila de llamadas
backtrace[=MAX_FRAMES]
backtrace_enable_on_signal[= MAX_FRAMES]
backtrace_dump_on_exit
backtrace_dump_prefix
backtrace_full
Establece el número de pilas de llamadas guardadas e imprime la pila de llamadas en semáforo o al salir
3) valor predeterminado de memoria malloc
fill_on_alloc[=MAX_FILLED_BYTES] el tamaño se establecerá en 0xeb.
fill_on_free[=MAX_FILLED_BYTES] Rellenar con 0xef cuando se libere la asignación.
fill[=MAX_FILLED_BYTES] Esto habilita la opción fill_on_alloc y la opción fill_on_free.
expand_alloc[=EXPAND_BYTES] agrega un número de asignación adicional a cada asignación.
1) Detección de pérdida de memoria
Ejecute #setprop libc.debug.malloc en el comando shell. Opción "backtrace lean_track verbose"
Cuando está activada, la información de la fuga se imprimirá cuando salga el proceso y la solicitud de memoria actual se imprimirá cuando se envíe kill -47
2 ) Comprobación de fallos de memoria
Agregue #setprop guard en el comando de shell libc.debug.malloc.options "backtrace fugas_track detallado"
.
malloc.options "backtrace filter_track verbose guard"
Esto verificará la cobertura de memoria y otras pruebas
3) Active verificar_punteros para verificar el uso después de las operaciones gratuitas y duplicadas
Active Verify_pointers para detectar el uso después de operaciones gratuitas y dobles gratuitas