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.