Fehler im Projekt beheben

Fehler bei nativen Abstürzen beheben

Wenn Sie Probleme dabei haben, einen nativen Crash-Dump oder Tombstone zu verstehen, ist die Fehlerbehebung für nativen Android-Plattformcode eine gute Einführung.

Einen umfassenderen Katalog häufig auftretender Abstürze und deren Untersuchung finden Sie unter Native Abstürze diagnostizieren.

Das Tool ndk-stack kann Ihnen dabei helfen, Abstürze zu symbolisieren. Sie können Abstürze in Android Studio wie in der allgemeinen Dokumentation zur Fehlerbehebung für Apps beschrieben beheben. Wenn Sie lieber die Befehlszeile verwenden, können Sie mit ndk-gdb entweder gdb oder lldb aus Ihrer Shell anhängen.

Apps direkten Zugriff auf Tombstone-Traces gewähren

Ab Android 12 (API-Level 31) kannst du über die Methode ApplicationExitInfo.getTraceInputStream() als Protokollpuffer auf das native Absturz-Tombstone deiner App zugreifen. Der Protokollpuffer wird mithilfe dieses Schemas serialisiert. Bisher war die einzige Möglichkeit, auf diese Informationen zuzugreifen, über die Android Debug Bridge (ADB).

Hier ein Beispiel für die Implementierung in Ihrer App:

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

Adressbereinigung (HWASan/ASan)

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

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

Malloc-Fehlerbehebung

Unter Malloc Debug und Native Memory Tracking using libc Callbacks finden Sie eine ausführliche Beschreibung der in die C-Bibliothek integrierten Optionen zum Beheben von Problemen mit nativem Arbeitsspeicher.

Malloc-Haken

Wenn Sie Ihre eigenen Tools erstellen möchten, unterstützt die libc von Android auch das Abfangen aller Zuweisungs-/kostenlosen Aufrufe, die während der Programmausführung erfolgen. Eine Anleitung zur Verwendung findest du in der Dokumentation zu Malloc_hooks.

Malloc-Statistiken

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

Die malloc_info-Funktion ist in Android 6.0 (Marshmallow) und höher verfügbar. Das XML-Schema ist im Header malloc.h von Bionic dokumentiert.

Profilerstellung

Für die CPU-Profilerstellung von nativem Code können Sie Simpleperf verwenden.