Address Sanitizer: HWASan/ASan
Entwickler der Android-Plattform verwenden HWAddressSanitizer (HWASan), um Speicherfehler in C/C++ zu finden.
Sie können vorgefertigte HWASan-Images auf unterstützte Pixel-Geräte flashen. Die Images sind unter ci.android.com verfügbar (detaillierte Einrichtungsanleitung).
Seit Android 8.0 (Oreo) ist es auch möglich, ASan zum Debuggen von Apps auf nicht gerooteten Produktionsgeräten zu verwenden. Eine Anleitung dazu finden Sie im ASan-Wiki.Heapprofd
Android 10 unterstützt heapprofd, einen Sampling-Heap-Profiler mit geringem Overhead. Mit heapprofd können Sie die native Arbeitsspeichernutzung Callstacks in Ihrem Programm zuordnen. Weitere Informationen finden Sie in der Perfetto-Dokumentation unter heapprofd – Android Heap Profiler.
Malloc Debug
Eine ausführliche Beschreibung der Debugging-Optionen für Probleme mit dem nativen Arbeitsspeicher finden Sie unter Malloc Debug und Native Memory Tracking using libc Callbacks.
libmemunreachable
libmemunreachable für Android ist ein nativer Speicherleck-Detektor ohne zusätzlichen Aufwand. Es wird ein ungenauer Mark-and-Sweep-Garbage-Collector-Pass für den gesamten nativen Speicher verwendet, bei dem alle nicht erreichbaren Blöcke als Lecks gemeldet werden. Eine Anleitung zur Verwendung finden Sie in der Dokumentation zu libmemunreachable.
Malloc-Hooks
Wenn Sie eigene Tools entwickeln möchten, unterstützt die libc von Android auch das Abfangen aller Zuweisungs-/Freigabeaufrufe, die während der Programmausführung erfolgen. Eine Anleitung zur Verwendung finden Sie in der Dokumentation zu malloc_hooks.
Malloc-Statistiken
Android unterstützt die Erweiterungen mallinfo(3)
und malloc_info(3)
für <malloc.h>
.
Die Funktion malloc_info
ist ab Android 6.0 (Marshmallow) verfügbar. Das zugehörige XML-Schema ist in der <malloc.h>
von Bionic dokumentiert.
Dalvik Debug Monitor Server
Sie können auch den Dalvik Debug Monitor Server (DDMS) verwenden, um eine grafische Darstellung der Malloc Debug-Ausgabe zu erhalten.
Wenn Sie DDMS verwenden möchten, müssen Sie zuerst die Benutzeroberfläche für den nativen Speicher aktivieren:
~/.android/ddms.cfg
öffnen- Fügen Sie die Zeile
native=true
hinzu.
Wenn Sie DDMS neu starten und einen Prozess auswählen, können Sie zum neuen Tab für die native Zuweisung wechseln und ihn mit einer Liste von Zuweisungen füllen. Das ist besonders nützlich, um Speicherlecks zu debuggen.