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 eseguire il flashing di 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 basato su campionamento con un basso overhead. heapprofd ti consente di attribuire l'utilizzo della memoria nativa alle callstack nel tuo programma. Per saperne di più, consulta heapprofd - Android Heap Profiler sul sito della documentazione di Perfetto.

Debug malloc

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

libmemunreachable

La libreria libmemunreachable di Android è un rilevatore di perdite di memoria nativa senza costi aggiuntivi. Utilizza un passaggio del garbage collector di tipo mark-and-sweep impreciso su tutta la memoria nativa, segnalando eventuali blocchi non raggiungibili come perdite. Per istruzioni sull'utilizzo, consulta la documentazione di libmemunreachable.

Hook Malloc

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

Statistiche 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 relativo schema XML è documentato in <malloc.h> di Bionic.

Dalvik Debug Monitor Server

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

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

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

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