Eseguire il debug del progetto

Esegui il debug degli arresti anomali nativi

Se hai difficoltà a comprendere un arresto anomalo o un'eliminazione definitiva nativa, Debug del codice della piattaforma Android nativa è un'ottima introduzione.

Per un catalogo più completo dei tipi comuni di arresti anomali e di come esaminarli, consulta la pagina Diagnosi degli arresti anomali nativi.

Lo strumento ndk-stack può aiutarti a simbolizzare gli arresti anomali. Puoi eseguire il debug degli arresti anomali in Android Studio come descritto nella documentazione generale relativa al debug dell'app. Se preferisci utilizzare la riga di comando, ndk-gdb consente di collegare gdb o lldb dalla shell.

Fornisci alle app l'accesso diretto alle tracce di Tombstone

A partire da Android 12 (livello API 31), puoi accedere alla tombstone degli arresti anomali nativi della tua app come buffer di protocollo tramite il metodo ApplicationExitInfo.getTraceInputStream(). Il buffer di protocollo è serializzato utilizzando questo schema. In precedenza, l'unico modo per accedere a queste informazioni era tramite Android Debug Bridge (adb).

Ecco un esempio di come implementare questa funzionalità nella tua app:

ActivityManager activityManager: ActivityManager = getSystemService(Context.ACTIVITY_SERVICE);
MutableList<ApplicationExitInfo> exitReasons = activityManager.getHistoricalProcessExitReasons(/* packageName = */ null, /* pid = */ 0, /* maxNum = */ 5);
for (ApplicationExitInfo aei: exitReasons) {
    if (aei.getReason() == REASON_CRASH_NATIVE) {
        // Get the tombstone input stream.
        InputStream trace = aei.getTraceInputStream();
        // The tombstone parser built with protoc uses the tombstone schema, then parses the trace.
        Tombstone tombstone = Tombstone.parseFrom(trace);
    }
}

Debug dei problemi di memoria nativa

Sanitizer per indirizzi (HWASan/ASan)

HWAddress Sanitizer (HWASan) e Address Sanitizer (ASan) sono simili a Valgrind, ma sono notevolmente più veloci e supportati su Android.

Sono la soluzione migliore per eseguire il debug degli errori di memoria su Android.

Debug Malloc

Consulta Debug Malloc e Monitoraggio della memoria nativo con callback libc per una descrizione completa delle opzioni integrate della libreria C per il debug dei problemi di memoria nativa.

Ganci Malloc

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

Statistiche di Malloc

Android supporta le estensioni mallinfo(3) e malloc_info(3) per <malloc.h>.

La funzionalità malloc_info è disponibile su Android 6.0 (Marshmallow) e versioni successive e il suo schema XML è documentato nell'intestazione malloc.h di Bionic.

Profilazione

Per la profilazione della CPU del codice nativo, puoi utilizzare Simpleperf.