Debugowanie awarii natywnych
Jeśli nie jesteś w stanie zrozumieć Debugowanie kodu natywnej platformy Androida to dobre wprowadzenie.
Pełniejszy katalog najczęstszych typów awarii i sposobów ich analizowania znajdziesz w Diagnozowanie awarii natywnych
Narzędzie ndk-stack może pomóc w symbolizacji awarii.
Awarie można debugować w Android Studio w sposób ogólny,
Dokumentacja debugowania aplikacji. Jeśli wolisz używać atrybutu
wiersza poleceń ndk-gdb pozwala dołączyć wiersz gdb
albo
lldb
.
Zapewnij aplikacjom bezpośredni dostęp do śladów tombstone
Począwszy od Androida 12 (poziom interfejsu API 31) będziesz mieć dostęp do natywnej awarii aplikacji
tombstone jako
bufor protokołu przez funkcję
ApplicationExitInfo.getTraceInputStream()
.
. Bufor protokołu jest zserializowany za pomocą tego schematu.
Wcześniej jedynym sposobem na uzyskanie dostępu do takich informacji było
Android Debug Bridge (adb).
Oto przykład zastosowania tej funkcji w aplikacji:
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);
}
}
Debugowanie problemów z pamięcią natywną
Sanitizer adresów (HWASan/ASan)
HWAddress Sanitizer (HWASan) i Rozwiązanie Address Sanitizer (ASan) jest podobne do Valgrind, ale znacznie szybszego i lepiej obsługiwanego na Androidzie.
To najlepszy sposób na debugowanie błędów pamięci na Androidzie.
Debugowanie Malloc
Zobacz Debugowanie Malloc oraz Natywne śledzenie pamięci przy użyciu wywołań zwrotnych libc dokładny opis wbudowanych opcji debugowania problemów z pamięcią natywną.
Haczyki Malloc
Jeśli chcesz utworzyć własne narzędzia, pakiet libc Androida obsługuje też przechwytywanie wszystkie przydziały/bezpłatne wywołania podczas realizacji programu. Zobacz Dokumentacja malloc_hooks .
Statystyki Malloc
Android obsługuje
informacje(3)
oraz
malloc_info(3)
do <malloc.h>
.
Funkcja malloc_info
jest dostępna w Androidzie 6.0 (Marshmallow) i
a jej schemat XML jest opisany w
malloc.h
nagłówek.
Profilowanie
Do profilowania procesora kodu natywnego możesz użyć narzędzia Simpleperf.