Native Arbeitsspeichernutzung beheben

Address Sanitizer: HWASan/ASan

Android-Plattformentwickler verwenden HWAddressSanitizer (HWASan), um Speicherfehler in C/C++ zu finden.

Sie können vorgefertigte 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 zu verwenden, um Apps auf nicht gerooteten Produktionsgeräten zu debuggen. Eine Anleitung finden Sie im ASan-Wiki.

Heapprofd

Android 10 unterstützt heapprofd, einen Heap-Profiler mit geringem Overhead. heapprofd ermöglicht es Ihnen, die native Arbeitsspeichernutzung auf Callstacks in Ihrem Programm zuzuordnen. Weitere Informationen finden Sie unter heapprofd – Android Heap Profiler auf der Perfetto-Dokumentationswebsite.

Malloc Debug

Unter Malloc Debug und Native Memory Tracking using libc Callbacks finden Sie eine ausführliche Beschreibung der Debugging-Optionen, die für Probleme mit dem nativen Arbeitsspeicher verfügbar sind.

libmemunreachable

libmemunreachable von Android ist ein Detektor für native Speicherlecks ohne Overhead. Er verwendet einen ungenauen Mark-and-Sweep-Garbage-Collector-Durchlauf für den gesamten nativen Arbeitsspeicher und meldet alle nicht erreichbaren Blöcke als Lecks. Eine Anleitung 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 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 malloc_info Funktion 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.

So aktivieren Sie die Benutzeroberfläche für den nativen Arbeitsspeicher in DDMS:

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