Eseguire il debug del progetto

Debug degli arresti anomali nativi

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

Per un catalogo più completo dei tipi comuni di arresti anomali e delle relative modalità di indagine, vedi Diagnostica 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 sezione Documentazione relativa al debug dell'app. Se preferisci utilizzare dalla riga di comando, ndk-gdb consente di collegare gdb o lldb dalla tua shell.

Fornisci alle app l'accesso diretto alle tracce tombali

A partire da Android 12 (livello API 31), puoi accedere all'arresto anomalo nativo della tua app tombstone come buffer di protocollo attraverso ApplicationExitInfo.getTraceInputStream(): . Il buffer di protocollo viene serializzato utilizzando questo schema. In precedenza, l'unico modo per ottenere l'accesso a queste informazioni era tramite la Android Debug Bridge (adb).

Di seguito è riportato 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);
    }
}

Eseguire il debug dei problemi di memoria nativa

Sanitizzatore di indirizzi (HWASan/ASan)

HWAddress Sanitizer (HWASan) e Il sanitizzatore degli indirizzi (ASan) è simile a Valgrind, ma molto più veloce e supportata su Android.

Sono l'opzione migliore per eseguire il debug degli errori di memoria su Android.

Debug Malloc

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

Hook Malloc

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

Statistiche Malloc

Android supporta info centro commerciale(3) e malloc_info(3) estensioni a <malloc.h>.

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

Profilazione

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