Eseguire il debug dell'utilizzo della memoria nativa

Address Sanitizer: HWASan/ASan

Gli sviluppatori della piattaforma Android utilizzano HWAddressSanitizer (HWASan) per trovare bug di memoria in C/C++.

Puoi flashare immagini HWASan precompilate sui dispositivi Pixel supportati da ci.android.com (istruzioni di configurazione dettagliate).

A partire da Android 8.0 (Oreo), è anche possibile utilizzare ASan per eseguire il debug delle app su dispositivi di produzione non rooted. Puoi trovare le istruzioni nella wiki di ASan.

Heapprofd

Android 10 supporta heapprofd, un profiler dell'heap a basso overhead e campionamento. heapprofd ti consente di attribuire l'utilizzo della memoria nativa agli stack di chiamate nel tuo programma. Per saperne di più, consulta heapprofd - Android Heap Profiler sul sito della documentazione di Perfetto.

debug malloc

Consulta Debug di Malloc e Monitoraggio della memoria nativa tramite i callback di libc per una descrizione dettagliata delle opzioni di debug disponibili per i problemi di memoria nativa.

libmemunreachable

libmemunreachable di Android è un rilevatore di perdite di memoria nativa a overhead zero. Utilizza un passaggio di garbage collector di tipo mark-and-sweep impreciso su tutta la memoria nativa, segnalando eventuali blocchi irraggiungibili come perdite. Per istruzioni sull'utilizzo, consulta la documentazione di libmemunreachable.

Hook di malloc

Se vuoi creare i tuoi strumenti, la libreria libc di Android supporta anche l'intercettazione di tutte le chiamate di allocazione/liberazione che si verificano durante l'esecuzione del programma. Consulta la documentazione di malloc_hooks per le istruzioni per l'uso.

Statistiche di malloc

Android supporta le estensioni mallinfo(3) e malloc_info(3) di <malloc.h>. La funzione malloc_info è disponibile su Android 6.0 (Marshmallow) e versioni successive e il relativo schema XML è documentato in <malloc.h> di Bionic.

Dalvik Debug Monitor Server

Puoi anche utilizzare Dalvik Debug Monitor Server (DDMS) per ottenere una visualizzazione grafica dell'output di Malloc Debug.

Per utilizzare DDMS, attiva prima la relativa UI di memoria nativa:

  1. Apri ~/.android/ddms.cfg
  2. Aggiungi la riga: native=true

Dopo aver riavviato DDMS e selezionato un processo, puoi passare alla nuova scheda di allocazione nativa e popolarla con un elenco di allocazioni. Ciò è particolarmente utile per il debug delle perdite di memoria.