Address Sanitizer: HWASan/ASan
Android-Plattformentwickler verwenden HWAddressSanitizer (HWASan), um Speicherfehler in C/C++ zu finden.
Sie können vorkonfigurierte HWASan-Images von 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 Stichprobenerhebung. Mit heapprofd können Sie die native Arbeitsspeichernutzung den Aufrufstacks in Ihrem Programm zuordnen. Weitere Informationen finden Sie unter heapprofd – Android-Heap-Profiler auf der Perfetto-Dokumentationswebsite.
Malloc-Debugging
Eine ausführliche Beschreibung der verfügbaren Debugging-Optionen für Probleme mit nativem Arbeitsspeicher finden Sie unter Malloc-Debugging und Natives Speicher-Tracking mit libc-Callbacks.
libmemunreachable
Die libmemunreachable von Android ist ein trägerloser lokaler Speicherleck-Detektor. Es verwendet einen ungenauen Mark-and-Sweep-Speicherbereiniger, der den gesamten nativen Arbeitsspeicher durchläuft und 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 die 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.