Esegui il debug dell'utilizzo della memoria nativa

Address Sanitizer: HWASan/ASan

Gli sviluppatori di piattaforme 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), è possibile utilizzare ASan anche per eseguire il debug delle app su dispositivi di produzione non rooted. Puoi trovare le istruzioni sulla 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 ulteriori informazioni, consulta la pagina heapprofd - Android Heap Profiler sul sito della documentazione di Perfetto.

Debug malloc

Consulta Debug di Malloc e Monitoraggio della memoria nativa tramite callback libc per una descrizione dettagliata delle opzioni di debug 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 libreria libc di Android supporta anche l'intercettazione di tutte le chiamate senza costi/di allocazione 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 DCM, attiva innanzitutto la relativa interfaccia utente di 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.