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 détecter les bugs de mémoire en 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 en production qui n'est pas en mode root. appareils. Pour savoir comment procéder, consultez wiki ASan.

Heapprofd

Android 10 est compatible avec heapprofd, un profileur de tas d'échantillonnage peu coûteux. heapprofd vous permet d'attribuer l'utilisation de la mémoire native aux piles d'appels de votre programme. Voir <ph type="x-smartling-placeholder"></ph> segment de mémoire Android (Android Heap Profiler) sur le Site de documentation de Perfetto pour en savoir plus.

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 les sections Débogage malloc et Suivi de la mémoire native à l'aide de rappels libc.

libmemunaccessible

libmemunaccessible d'Android est un détecteur de fuite de mémoire native sans frais. Il utilise un récupérateur de mémoire imprécis avec marquage/balayage sur toute la mémoire native, en signalant les blocs inaccessibles comme des fuites. Consultez le libmeminaccessible documentation pour obtenir des instructions d'utilisation.

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 accepte les extensions mallinfo(3) et malloc_info(3) dans <malloc.h>. La fonction malloc_info est disponible sur Android 6.0 (Marshmallow) ou version ultérieure. son schéma XML est documenté dans le <malloc.h>

Dalvik Debug Monitor Server

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

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

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

Après avoir redémarré DDMS et sélectionné un processus, vous pouvez passer à l'onglet d'allocation native et le renseigner avec une liste d'allocations. C'est particulièrement utile pour déboguer les fuites de mémoire.