Debugowanie projektu

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.