Fehler bei der Nutzung des nativen Arbeitsspeichers beheben

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:

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