Detección de fugas de memoria nativas en el código JNI de Android

¿Cómo detectar fugas de memoria en el código JNI de Android? Estoy usando Froyo

Actualización 2017: valgrind está disponible para Android. La característica de depuración de malloc incorporada se expandió significativamente en Android N , y es muy útil para encontrar fugas de memoria. Puede que tenga que _exit() la aplicación para activar el volcado.

La función DDMS descrita a continuación obtiene actualmente una breve mención en los documentos oficiales.


Hay una función experimental, no compatible que puede ser capaz de aprovechar.

En su archivo de configuración de DDMS (por ejemplo ~/.android/ddms.cfg en Linux), agregue "native = true". Esto habilita la pestaña Heap nativo.

A continuación, habilite el seguimiento nativo de asignación de heap en el dispositivo y reinicie el marco de aplicación:

 % adb shell setprop libc.debug.malloc 1 % adb shell stop % adb shell start 

(Tenga en cuenta que esto requiere root.También tenga en cuenta que esto sólo se aplica a las versiones recientes, en versiones anteriores también es necesario reemplazar libc.so por libc_debug.so en / system / lib del dispositivo).

Usted puede saber si tiene el dispositivo configurado correctamente viendo la salida de logcat mientras emite un comando simple ("ls de shell de adb"). Si tú ves:

 I/libc ( 4847): ls using MALLOC_DEBUG = 1 (leak checker) 

Entonces usted sabe que lo ha habilitado.

Ahora puede usar las funciones de pestaña Heap nativa para tomar instantáneas del uso de la memoria heap.

DDMS extraerá automáticamente símbolos de las bibliotecas compartidas .../symbols/system/lib en el árbol de fuentes de Android. Por supuesto, esto requiere que usted tenga un árbol completo de fuentes de Android, y su dispositivo está ejecutando código construido a partir de él. Si no es así, las trazas de pila no se pueden decodificar en nombres de símbolos, lo que reduce la utilidad de la característica.

U necesidad de tomar la instantánea antes y después de la prueba corrió. A continuación, presione el botón +/- y luego mostrará la ubicación de memoria retenida.

He utilizado en JB, JB +, KITKAT y lollipop también. Su muy buena herramienta en android para encontrar las fugas.

  • Jit: Redimensionar JitTable de 512 a 1024 y así sucesivamente ... ¿qué es esto?
  • Pocas pérdidas de memoria en Facebook SDK
  • Android Studio - Cómo aumentar el tamaño del montón asignado
  • LeakCanary detecta pérdida de memoria de Android WebView
  • Java - android UDP falta de fiabilidad
  • Android Surfaceview Hilos y fugas de memoria
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.