Cómo depurar el uso de la memoria nativa

Address Sanitizer: HWASan/ASan

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

Puedes escribir en la memoria flash imágenes de HWASan compiladas previamente en dispositivos Pixel compatibles desde ci.android.com (instrucciones de configuración detalladas).

A partir de Android 8.0 (Oreo), también es posible usar ASan para depurar apps en dispositivos de producción sin derechos de administrador. Puedes encontrar instrucciones en la wiki de ASan.

Heapprofd

Android 10 admite heapprofd, un generador de perfiles de montón de muestreo de baja sobrecarga. heapprofd te permite atribuir el uso de memoria nativa a las pilas de llamadas de tu programa. Consulta heapprofd - Android Heap Profiler en el sitio de documentación de Perfetto para obtener más información.

Depuración de malloc

Consulta Depuración de malloc y Cómo realizar un seguimiento de la memoria nativa mediante devoluciones de llamadas de libc para obtener una descripción detallada de las opciones de depuración disponibles para los problemas de memoria nativa.

libmemunreachable

El elemento libmemunreachable de Android es un detector de fugas de memoria nativo sin sobrecarga. Usa un recolector de elementos no utilizados de marcación y limpieza impreciso que pasa por toda la memoria nativa y informa los bloques inaccesibles como fugas. Consulta la documentación de libmemunreachable para obtener instrucciones de uso.

Hooks malloc

Si quieres compilar tus propias herramientas, la libc de Android también admite la interceptación de todas las asignaciones o llamadas gratuitas que ocurren durante la ejecución del programa. Consulta la documentación sobre malloc_hooks para obtener instrucciones de uso.

Estadísticas de malloc

Android admite las extensiones mallinfo(3) y malloc_info(3) para <malloc.h>. La función malloc_info está disponible en Android 6.0 (Marshmallow) y versiones posteriores, y su esquema XML se documenta en <malloc.h> de Bionic.

Dalvik Debug Monitor Server

También puedes usar el Dalvik Debug Monitor Server (DDMS) para obtener una vista gráfica del resultado de la depuración de Malloc.

Para usar DDMS, primero debes activar su IU de memoria nativa:

  1. Abrir ~/.android/ddms.cfg
  2. Agrega la siguiente línea: native=true

Después de reiniciar DDMS y seleccionar un proceso, puedes cambiar a la nueva pestaña de asignación nativa y propagarla con una lista de asignaciones. Esto es particularmente útil para depurar fugas de memoria.