Address Sanitizer: HWASan/ASan
Android-Plattformentwickler verwenden HWAddressSanitizer (HWASan), um Speicherfehler in C/C++ zu finden.
Sie können vordefinierte HWASan-Images unter ci.android.com auf unterstützte Pixel-Geräte flashen (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 Heap-Profiler mit geringem Overhead und Sampling. Mit heapprofd können Sie die native Arbeitsspeichernutzung Aufrufstacks in Ihrem Programm zuordnen. Weitere Informationen finden Sie unter heapprofd – Android-Heap-Profiler auf der Perfetto-Dokumentationswebsite.
Malloc-Fehlerbehebung
Eine ausführliche Beschreibung der Fehlerbehebungsoptionen für Probleme mit nativem Arbeitsspeicher finden Sie unter Malloc Debug und Natives Arbeitsspeicher-Tracking mit libc-Callbacks.
libmemunerreichbar
Die libmemunreachable von Android ist ein trägerloser lokaler Speicherleck-Detektor. Dabei wird der gesamte native Arbeitsspeicher durch eine ungenaue Mark-and-Sweep-Speicherbereinigung übergeben, die alle nicht erreichbaren Blöcke als Lecks meldet. Eine Anleitung zur Verwendung finden Sie in der libmemunreachable-Dokumentation.
Malloc-Hooks
Wenn Sie eigene Tools erstellen 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 malloc_hooks-Dokumentation.
Malloc-Statistiken
Android unterstützt die Erweiterungen mallinfo(3)
und malloc_info(3)
für <malloc.h>
.
Die Funktion malloc_info
ist in Android 6.0 (Marshmallow) und höher verfügbar. Das zugehörige XML-Schema ist in Bionic's <malloc.h>
dokumentiert.
Dalvik Debug Monitor Server
Sie können auch den Dalvik Debug Monitor Server (DDMS) verwenden, um eine grafische Ansicht der Malloc-Debug-Ausgabe zu erhalten.
Wenn Sie DDMS verwenden möchten, müssen Sie zuerst die native Speicher-Benutzeroberfläche aktivieren:
~/.android/ddms.cfg
öffnen- Fügen Sie folgende Zeile hinzu:
native=true
Wenn Sie DDMS neu starten und einen Prozess auswählen, können Sie zum neuen Tab „Native Zuordnung“ wechseln und ihn mit einer Liste von Zuordnungen füllen. Das ist besonders nützlich, um Speicherlecks zu beheben.