Adresse Sanitizer: HWASan/ASan
Entwickler von Android-Plattformen verwenden HWAddressSanitizer (HWASan), um Speicherfehler in C/C++ zu finden.
Sie können vorgefertigte HWAAn-Images von ci.android.com auf unterstützte Pixel-Geräte flashen ( detaillierte Einrichtungsanweisungen ).
Seit Android 8.0 (Oreo) ist es auch möglich, ASan zum Debuggen von Apps auf nicht gerooteten Produktionsgeräten zu verwenden. Anleitungen finden Sie im ASan-Wiki .Heapprofd
Android 10 unterstützt heapprofd, einen Sampling-Heap-Profiler mit geringem Overhead. Mit heapprofd können Sie Callstacks 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 nativem Speicher finden Sie unter Malloc-Debugging undNachverfolgung des nativen Speichers mithilfe von libc-Callbacks .
libmeunreachable
libmemunreachable von Android ist ein nativer Speicherleckdetektor ohne Overhead. Es verwendet einen ungenauen Mark-and-Sweep-Garbage-Collector-Pass über den gesamten nativen Speicher und meldet alle nicht erreichbaren Blöcke als Lecks. Anweisungen zur Verwendung finden Sie in der libmemunreachable-Dokumentation .
Malloc-Haken
Wenn Sie Ihre eigenen Tools erstellen möchten, unterstützt die libc von Android auch das Abfangen aller Zuweisungs-/freien Aufrufe, die während der Programmausführung auftreten. Anweisungen zur Verwendung finden Sie in der malloc_hooks-Dokumentation .
Malloc-Statistiken
Android unterstützt die 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 <malloc.h>
.
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 zuerst die Benutzeroberfläche des nativen Speichers:
- Öffnen
~/.android/ddms.cfg
- Fügen Sie die Zeile hinzu:
native=true
Nach dem Neustart von DDMS und der Auswahl eines Prozesses können Sie zur neuen Registerkarte „Native Zuordnung“ wechseln und diese mit einer Liste von Zuordnungen füllen. Dies ist besonders nützlich zum Debuggen von Speicherlecks.