Debug dell'utilizzo della memoria nativa

Indirizzo disinfettante: HWASan/ASan

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

Puoi eseguire il flashing di immagini HWASan predefinite sui dispositivi Pixel supportati da ci.android.com ( istruzioni dettagliate per la configurazione ).

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

Heapprofd

Android 10 supporta heapprofd, un profiler di heap di campionamento a basso costo. heapprofd ti consente di attribuire l'utilizzo della memoria nativa agli stack di chiamate nel tuo programma. Per ulteriori informazioni, vedere heapprofd - Android Heap Profiler sul sito della documentazione di Perfetto .

Debug di Malloc

Vedi Malloc Debug e Native Memory Tracking utilizzando i callback libc per una descrizione approfondita delle opzioni di debug disponibili per i problemi della memoria nativa.

libmemunreachable

libmemunreachable di Android è un rilevatore di perdite di memoria nativo a zero spese. Utilizza un passaggio impreciso del garbage collector mark-and-sweep su tutta la memoria nativa, segnalando eventuali blocchi irraggiungibili come perdite. Consulta la documentazione di libmemunreachable per le istruzioni sull'uso.

Ganci Malloc

Se vuoi creare i tuoi strumenti, libc di Android supporta anche l'intercettazione di tutte le allocazioni/chiamate gratuite che avvengono durante l'esecuzione del programma. Consulta la documentazione di malloc_hooks per le istruzioni sull'utilizzo.

Statistiche di Malloc

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

Dalvik Debug Monitor Server

È inoltre possibile utilizzare Dalvik Debug Monitor Server (DDMS) per ottenere una visualizzazione grafica dell'output di Malloc Debug.

Per utilizzare DDMS, attiva innanzitutto l'interfaccia utente della memoria nativa:

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

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