Native Arbeitsspeichernutzung beheben

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:

  1. ~/.android/ddms.cfg öffnen
  2. 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.