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.