ndk-stack

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.