Debuggen der Nutzung des nativen Speichers

Adresse Desinfektionsmittel: HWASan/ASan

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

Sie können vorgefertigte HWASan-Bilder von ci.android.com auf unterstützte Pixel-Geräte flashen ( ausführliche Einrichtungsanweisungen ).

Seit Android 8.0 (Oreo) ist es auch möglich, ASan zum Debuggen von Apps auf nicht gerooteten Produktionsgeräten zu verwenden. Eine Anleitung finden Sie im ASan-Wiki .

Heapprofd

Android 10 unterstützt heapprofd, einen Sampling-Heap-Profiler mit geringem Overhead. Mit heapprofd können Sie Aufrufstapeln in Ihrem Programm die Nutzung des nativen Speichers zuordnen. Weitere Informationen finden Sie unter heapprofd – Android Heap Profiler auf der Perfetto-Dokumentationsseite .

Malloc-Debug

Eine ausführliche Beschreibung der verfügbaren Debugging-Optionen für Probleme mit dem nativen Speicher finden Sie unter Malloc Debug and Native Memory Tracking using libc Callbacks .

libmemunreachable

libmemunreachable von Android ist ein nativer Speicherleckdetektor ohne Overhead. Es verwendet einen ungenauen Mark-and-Sweep-Garbage-Collector-Durchgang über den gesamten nativen Speicher und meldet alle nicht erreichbaren Blöcke als Lecks. Anweisungen zur Verwendung finden Sie in der Dokumentation zu libmemunreachable .

Malloc-Haken

Wenn Sie Ihre eigenen Tools erstellen möchten, unterstützt die libc von Android auch das Abfangen aller Zuteilungs-/Freiaufrufe, die während der Programmausführung erfolgen. Anweisungen 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 und ihr XML-Schema ist in Bionics <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.

Um DDMS zu verwenden, aktivieren Sie zunächst die Benutzeroberfläche für den nativen Speicher:

  1. Öffnen Sie ~/.android/ddms.cfg
  2. Fügen Sie die Zeile hinzu: native=true

Nach dem Neustart von DDMS und der Auswahl eines Prozesses können Sie zur neuen nativen Zuordnungsregisterkarte wechseln und diese mit einer Liste von Zuordnungen füllen. Dies ist besonders nützlich zum Debuggen von Speicherlecks.