Depuración del uso de la memoria nativa

Desinfectante de dirección: HWASan/ASan

Los desarrolladores de la plataforma Android usan HWAddressSanitizer (HWASan) para encontrar errores de memoria en C/C++.

Puede flashear imágenes HWASan preconstruidas a dispositivos Pixel compatibles desde ci.android.com ( instrucciones de configuración detalladas ).

Desde Android 8.0 (Oreo), también es posible usar ASan para depurar aplicaciones en dispositivos de producción no rooteados. Puede encontrar instrucciones en la wiki de ASan .

Heapprofd

Android 10 es compatible con heapprofd, un perfilador de montón de muestreo de baja sobrecarga. heapprofd le permite atribuir el uso de la memoria nativa a las pilas de llamadas en su programa. Consulte heapprofd - Android Heap Profiler en el sitio de documentación de Perfetto para obtener más información.

Depuración de Malloc

Consulte Depuración de Malloc yseguimiento de memoria nativa mediante devoluciones de llamada de libc para obtener una descripción completa de las opciones de depuración disponibles para problemas de memoria nativa.

libmemunalcanzable

libmemunreachable de Android es un detector de fugas de memoria nativa sin sobrecarga. Utiliza un recolector de basura de marca y barrido impreciso que pasa por toda la memoria nativa, informando cualquier bloque inalcanzable como fugas. Consulte la documentación de libmemunreachable para obtener instrucciones de uso.

Ganchos Malloc

Si desea crear sus propias herramientas, la libc de Android también admite la interceptación de todas las asignaciones/llamadas gratuitas que ocurren durante la ejecución del programa. Consulte la documentación de malloc_hooks para obtener instrucciones de uso.

Estadísticas de Malloc

Android admite las mallinfo(3) y malloc_info(3) para <malloc.h> . La función malloc_info está disponible en Android 6.0 (Marshmallow) y superior y su esquema XML está documentado en <malloc.h> de Bionic.

Servidor de monitoreo de depuración Dalvik

También puede usar Dalvik Debug Monitor Server (DDMS) para obtener una vista gráfica de la salida de Malloc Debug.

Para usar DDMS, primero encienda su interfaz de usuario de memoria nativa:

  1. Abra ~/.android/ddms.cfg
  2. Agregue la línea: native=true

Al reiniciar DDMS y seleccionar un proceso, puede cambiar a la nueva pestaña de asignación nativa y completarla con una lista de asignaciones. Esto es especialmente útil para depurar pérdidas de memoria.