Débogage de l'utilisation de la mémoire native

Désinfectant d’adresse : HWASan/ASan

Les développeurs de plates-formes Android utilisent HWAddressSanitizer (HWASan) pour rechercher les bogues de mémoire en C/C++.

Vous pouvez flasher des images HWASan prédéfinies sur des appareils Pixel pris en charge à partir de ci.android.com ( instructions de configuration détaillées ).

Depuis Android 8.0 (Oreo), il est également possible d'utiliser ASan pour déboguer des applications sur des appareils de production non rootés. Vous pouvez trouver des instructions sur le wiki ASan .

Il a approuvé

Android 10 prend en charge heapprofd, un profileur de tas d'échantillonnage à faible surcharge. heapprofd vous permet d'attribuer l'utilisation de la mémoire native aux piles d'appels de votre programme. Voir heapprofd - Android Heap Profiler sur le site de documentation Perfetto pour plus d'informations.

Débogage de Malloc

Voir Malloc Debug et Native Memory Tracking using libc Callbacks pour une description détaillée des options de débogage disponibles pour les problèmes de mémoire native.

libmeminaccessible

libmemunreachable d'Android est un détecteur de fuite de mémoire native sans surcharge. Il utilise un garbage collector imprécis par marquage et balayage sur toute la mémoire native, signalant tous les blocs inaccessibles comme des fuites. Consultez la documentation de libmemunreachable pour les instructions d'utilisation.

Crochets Malloc

Si vous souhaitez créer vos propres outils, la libc d'Android prend également en charge l'interception de toutes les allocations/appels gratuits qui se produisent pendant l'exécution du programme. Consultez la documentation de malloc_hooks pour les instructions d'utilisation.

Statistiques de Malloc

Android prend en charge les extensions mallinfo(3) et malloc_info(3) de <malloc.h> . La fonction malloc_info est disponible dans Android 6.0 (Marshmallow) et supérieur et son schéma XML est documenté dans le <malloc.h> de Bionic.

Serveur de surveillance de débogage Dalvik

Vous pouvez également utiliser Dalvik Debug Monitor Server (DDMS) pour obtenir une vue graphique de la sortie de Malloc Debug.

Pour utiliser DDMS, activez d'abord son interface utilisateur de mémoire native :

  1. Ouvrez ~/.android/ddms.cfg
  2. Ajoutez la ligne : native=true

Après avoir relancé DDMS et sélectionné un processus, vous pouvez basculer vers le nouvel onglet d'allocation native et le remplir avec une liste d'allocations. Ceci est particulièrement utile pour déboguer les fuites de mémoire.