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

Assainisseur d'adresse : HWASan/ASan

Les développeurs de la plate-forme Android utilisent HWAddressSanitizer (HWASan) pour trouver des bogues de mémoire en C/C++.

Vous pouvez flasher des images HWASan prédéfinies sur les 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 approuve

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 de Perfetto pour plus d'informations.

Débogage de Malloc

Voir Débogage de Malloc et suivi de la mémoire native à l'aide des rappels libc pour une description détaillée des options de débogage disponibles pour les problèmes de mémoire native.

libmemunreachable

libmemunreachable d'Android est un détecteur de fuite de mémoire natif sans surcharge. Il utilise un passage de ramasse-miettes imprécis sur toute la mémoire native, signalant tous les blocs inaccessibles comme des fuites. Voir la documentation libmemunreachable pour les instructions d'utilisation.

Hameçons Malloc

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

Statistiques de Malloc

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

Dalvik Debug Monitor Server

Vous pouvez également utiliser le 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

Lors de la relance de DDMS et de la sélection d'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.