Mit dem ndk-stack
-Tool können Sie Stacktraces aus
adb logcat
oder
Grabstein in /data/tombstones/
. Er ersetzt alle
Adresse innerhalb einer gemeinsam genutzten Bibliothek mit der entsprechenden
<source-file>:<line-number>
aus Ihrem Quellcode,
was die Fehlerbehebung vereinfacht.
Beispielsweise lautet die Übersetzung so:
I/DEBUG ( 31): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** I/DEBUG ( 31): Build fingerprint: 'generic/google_sdk/generic/:2.2/FRF91/43546:eng/test-keys' I/DEBUG ( 31): pid: 351, tid: 351 >>> /data/local/ndk-tests/crasher <<< I/DEBUG ( 31): signal 11 (SIGSEGV), fault addr 0d9f00d8 I/DEBUG ( 31): r0 0000af88 r1 0000a008 r2 baadf00d r3 0d9f00d8 I/DEBUG ( 31): r4 00000004 r5 0000a008 r6 0000af88 r7 00013c44 I/DEBUG ( 31): r8 00000000 r9 00000000 10 00000000 fp 00000000 I/DEBUG ( 31): ip 0000959c sp be956cc8 lr 00008403 pc 0000841e cpsr 60000030 I/DEBUG ( 31): #00 pc 0000841e /data/local/ndk-tests/crasher I/DEBUG ( 31): #01 pc 000083fe /data/local/ndk-tests/crasher I/DEBUG ( 31): #02 pc 000083f6 /data/local/ndk-tests/crasher I/DEBUG ( 31): #03 pc 000191ac /system/lib/libc.so I/DEBUG ( 31): #04 pc 000083ea /data/local/ndk-tests/crasher I/DEBUG ( 31): #05 pc 00008458 /data/local/ndk-tests/crasher I/DEBUG ( 31): #06 pc 0000d362 /system/lib/libc.so I/DEBUG ( 31):
in den besser lesbaren Text:
********** Crash dump: ********** Build fingerprint: 'generic/google_sdk/generic/:2.2/FRF91/43546:eng/test-keys' pid: 351, tid: 351 >>> /data/local/ndk-tests/crasher <<< signal 11 (SIGSEGV), fault addr 0d9f00d8 Stack frame #00 pc 0000841e /data/local/ndk-tests/crasher : Routine zoo in /tmp/foo/crasher/jni/zoo.c:13 Stack frame #01 pc 000083fe /data/local/ndk-tests/crasher : Routine bar in /tmp/foo/crasher/jni/bar.c:5 Stack frame #02 pc 000083f6 /data/local/ndk-tests/crasher : Routine my_comparison in /tmp/foo/crasher/jni/foo.c:9 Stack frame #03 pc 000191ac /system/lib/libc.so Stack frame #04 pc 000083ea /data/local/ndk-tests/crasher : Routine foo in /tmp/foo/crasher/jni/foo.c:14 Stack frame #05 pc 00008458 /data/local/ndk-tests/crasher : Routine main in /tmp/foo/crasher/jni/main.c:19 Stack frame #06 pc 0000d362 /system/lib/libc.so
Nutzung
Zur Verwendung von ndk-stack
benötigen Sie zuerst ein Verzeichnis mit
Versionen der geteilten Bibliotheken Ihrer App
mit Debugging-Symbolen. Wenn Sie
ndk-build
, diese geteilten Fotogalerien finden Sie in
$PROJECT_PATH/obj/local/<abi>
, wobei <abi>
ist das ABI deines Geräts.
Es gibt zwei Möglichkeiten, das Tool zu verwenden. Sie können den Logcat-Text als direkte Eingabe an das Programm übergeben. Beispiel:
adb logcat | $NDK/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi-v7a
Sie können den Logcat auch mit der Option -dump
als Eingabedatei angeben. Beispiel:
adb logcat > /tmp/foo.txt $NDK/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi-v7a -dump foo.txt
Wenn das Tool mit dem Parsen der Logcat-Ausgabe beginnt, sucht das Tool nach einer ersten Zeile mit Sternchen. Beispiel:
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Hinweis : Denken Sie beim Kopieren und Einfügen von Traces an diese Zeile oder
ndk-stack
funktioniert nicht richtig.
Weitere Informationen
Google Play verwendet ndk-stack
, um Stacktraces für native Anzeigen zu symbolisieren
in der Google Play Console verwalten. Informationen zum Aktivieren dieser Funktion für Ihr
App in einer Produktionsumgebung verwenden können,
eine Datei mit Symbolen zum Debuggen von nativem Code einfügen
für Ihre App in der Google Play Console.