Debugowanie projektu

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.