Déboguer les problèmes d'utilisation de la mémoire native

Address Sanitizer: HWASan/ASan

Les développeurs de la plate-forme Android utilisent HWAddressSanitizer (HWASan) pour trouver les bugs de mémoire dans C/C++.

Vous pouvez flasher des images HWASan prédéfinies sur les appareils Pixel compatibles depuis 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 trouverez des instructions sur le wiki ASan.

Heapprofd

Android 10 est compatible avec heapprofd, un profileur de tas d'échantillonnage à faible surcharge. heapprofd vous permet d'attribuer l'utilisation de la mémoire native aux callstacks de votre programme. Pour en savoir plus, consultez heapprofd - Android Heap Profiler sur le site de documentation Perfetto.

Débogage malloc

Pour obtenir une description détaillée des options de débogage disponibles pour les problèmes de mémoire native, consultez Débogage malloc et Suivi de la mémoire native à l'aide de rappels libc.

libmemunreachable

La bibliothèque libmemunreachable d'Android est un détecteur de fuites de mémoire native sans surcharge. Elle utilise un collecteur de déchets de balayage et de marquage imprécis sur toute la mémoire native, et signale tous les blocs inaccessibles comme des fuites. Pour en savoir plus, consultez la documentation concernant le libmemunreachable.

Hooks malloc

Si vous souhaitez créer vos propres outils, la bibliothèque libc d'Android permet également d'intercepter tous les appels d'allocation et sans frais qui ont lieu pendant l'exécution du programme. Pour en savoir plus, consultez la documentation concernant malloc_hooks.

Statistiques malloc

Android est compatible avec les mallinfo(3)et malloc_info(3) extensions de <malloc.h>. La fonction malloc_info est disponible dans Android 6.0 (Marshmallow) et les versions ultérieures, et son schéma XML est documenté dans Bionic's <malloc.h>.

Serveur de surveillance du débogage Dalvik

Vous pouvez également utiliser le serveur de surveillance du débogage Dalvik (DDMS) pour obtenir une vue graphique de la sortie de débogage Malloc.

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

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

Lorsque vous relancez DDMS et sélectionnez un processus, vous pouvez passer au nouvel onglet d'allocation native et le remplir avec une liste d'allocations. Cela est particulièrement utile pour déboguer les fuites de mémoire.