Debuguj awarie natywne
Jeśli nie wiesz, jak działa natywny zrzut lub tombstone, przeczytaj artykuł Debugowanie kodu natywnej platformy Androida.
Pełniejszy katalog typowych typów awarii i informacje o sposobach ich badania znajdziesz w artykule Diagnozowanie awarii natywnych.
Narzędzie ndk-stack może pomóc symbolizować awarie.
Awarie możesz debugować w Android Studio zgodnie z opisem w ogólnej dokumentacji Debugowanie aplikacji. Jeśli wolisz używać wiersza poleceń, ndk-gdb umożliwia dołączenie gdb
lub lldb
z powłoki.
Przyznawanie aplikacjom bezpośredniego dostępu do śladów nagrobków
Od Androida 12 (poziom interfejsu API 31) możesz uzyskać dostęp do natywnego stanu awarii aplikacji jako bufora protokołu za pomocą metody ApplicationExitInfo.getTraceInputStream()
. Bufor protokołu jest zserializowany za pomocą tego schematu.
Wcześniej jedynym sposobem uzyskania dostępu do tych informacji był skorzystanie z narzędzia 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ą
Preparat do dezynfekcji adresu (HWASan/ASan)
HWAddress Sanitizer (HWASan) i Address Sanitizer (ASan) to podobne rozwiązania do Valgrind, ale są obsługiwane w Androidzie znacznie szybciej i lepiej.
To najlepsze rozwiązanie do debugowania błędów pamięci na urządzeniach z Androidem.
Debugowanie Malloca
Dokładny opis wbudowanych opcji biblioteki C do debugowania problemów z pamięcią natywnym znajdziesz w sekcjach Debugowanie Malloca i Śledzenie pamięci natywnej korzystające z wywołań zwrotnych libc.
Haki hakerskie
Jeśli chcesz stworzyć własne narzędzia, biblioteka Androida obsługuje też przechwytywanie wszystkich przydziałów/bezpłatnych wywołań, które mają miejsce podczas wykonywania programu. Instrukcje użytkowania znajdziesz w dokumentacji malloc_hooks.
Statystyki Malloca
Android obsługuje rozszerzenia mallinfo(3) i malloc_info(3) do <malloc.h>
.
Funkcja malloc_info
jest dostępna w Androidzie 6.0 (Marshmallow) i nowszych. Jej schemat XML jest udokumentowany w nagłówku malloc.h systemu Bionic.
Profilowanie
Do profilowania procesora kodu natywnego możesz użyć usługi Simpleperf.