Debuggen der nativen Speichernutzung

Adressendesinfektionsmittel: HWASan/ASan

Android - Plattform - Entwickler verwenden HWAddressSanitizer (Hwasan) Speicher Fehler in C / C ++ zu finden.

Sie können vorkompilierte Hwasan Bilder zu unterstützten Pixel - Geräte von Flash ci.android.com ( detaillierte Installationsanweisungen ).

Seit Android 8.0 (Oreo) ist es auch möglich, ASan zum Debuggen von Apps auf nicht gerooteten Produktionsgeräten zu verwenden. Sie können Anweisungen auf dem finden 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 native Speichernutzung zuordnen. Siehe heapprofd - Android Heap - Profiler auf der Perfetto - Dokumentations - Website für weitere Informationen.

Malloc-Debugging

Siehe Malloc Debug undindia Speicher -Tracking mit libc Rückrufe für eine gründliche Beschreibung der Debug - Optionen für native Speicherprobleme.

libmemunerreichbar

libmemunreachable von Android ist ein nativer Speicherleckdetektor ohne Overhead. Es verwendet einen ungenauen Mark-and-Sweep-Garbage-Collector-Pass für den gesamten nativen Speicher und meldet alle nicht erreichbaren Blöcke als Lecks. Siehe die libmemunreachable Dokumentation für Gebrauchsanweisungen.

Malloc-Haken

Wenn Sie Ihre eigenen Tools erstellen möchten, unterstützt die libc von Android auch das Abfangen aller Zuweisungen / freien Aufrufe, die während der Programmausführung auftreten. Siehe die malloc_hooks Dokumentation für Gebrauchsanweisungen.

Malloc-Statistiken

Android unterstützt die mallinfo(3) und malloc_info(3) Erweiterungen <malloc.h> . Die malloc_info Funktion ist in Android 6.0 (Eibisch) verfügbar und höher und sein XML - Schema wird in Bionic dokumentiert <malloc.h> .

Dalvik Debug Monitor-Server

Sie können auch die Verwendung Dalvik Debug Monitor Server (DDMS) eine grafische Ansicht von Malloc Debug - Ausgabe zu erhalten.

Um DDMS zu verwenden, aktivieren Sie zuerst die native Speicherbenutzeroberfläche:

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

Nachdem Sie DDMS neu gestartet und einen Prozess ausgewählt haben, können Sie zur neuen Registerkarte für die native Zuweisung wechseln und diese mit einer Liste von Zuweisungen füllen. Dies ist besonders nützlich zum Debuggen von Speicherlecks.