Fehler im Projekt beheben

Fehlerbehebung bei nativen Abstürzen

Falls Sie Probleme haben, einen nativen Crash-Dump oder Tombstone zu verstehen, Fehlerbehebung bei nativem Android-Plattformcode ist eine gute Einleitung.

Einen umfassenderen Katalog der häufigsten Absturztypen und wie Sie diese untersuchen können, finden Sie unter Native Abstürze diagnostizieren.

Mit dem Tool ndk-stack lassen sich Abstürze symbolisieren. Sie können Abstürze in Android Studio wie im allgemeinen Fehler in der App-Dokumentation beheben Wenn Sie lieber die Methode ndk-gdb können Sie gdb- oder lldb aus Ihrer Shell.

Apps direkten Zugriff auf Tombstone-Traces gewähren

Ab Android 12 (API-Level 31) kannst du auf den nativen Absturz deiner App zugreifen Tombstone als Protokollpuffer über den ApplicationExitInfo.getTraceInputStream() . Der Protokollzwischenspeicher wird mit diesem Schema serialisiert. Früher konnte man auf diese Informationen nur über das Android Debug Bridge (ADB):

Hier ist ein Beispiel, wie Sie dies in Ihrer App implementieren können:

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);
    }
}

Probleme mit nativem Arbeitsspeicher beheben

Address Sanitizer (HWASan/ASan)

HWAddress Sanitizer (HWASan) und Address Sanitizer (ASan) ähneln Valgrind, aber wesentlich schneller und viel besser unterstützt.

Dies ist die beste Option zum Beheben von Arbeitsspeicherfehlern unter Android.

Malloc-Fehlerbehebung

Weitere Informationen finden Sie unter Malloc-Fehlerbehebung und Natives Arbeitsspeicher-Tracking mit libc-Callbacks finden Sie eine ausführliche Beschreibung der integrierten Debugging-Optionen der C-Bibliothek. Probleme mit nativem Arbeitsspeicher.

Malloc-Hooks

Wenn Sie Ihre eigenen Tools erstellen möchten, unterstützt die libc von Android auch das Abfangen alle Zuteilung/kostenlose Aufrufe, die während der Programmausführung erfolgen. Weitere Informationen finden Sie in der malloc_hooks-Dokumentation .

Malloc-Statistik

Android unterstützt die mallinfo(3) und malloc_info(3) Erweiterungen zu <malloc.h>.

Die malloc_info-Funktion ist in Android 6.0 (Marshmallow) und und sein XML-Schema ist im Bionic- malloc.h Header.

Profilerstellung

Zur CPU-Profilerstellung für nativen Code können Sie Simpleperf verwenden.