Lo strumento ndk-stack
consente di simbolizzare le analisi dello stack da
adb logcat
o da
una tomba in /data/tombstones/
. Sostituisce qualsiasi indirizzo all'interno di una libreria condivisa con l'indirizzo <source-file>:<line-number>
corrispondente del tuo codice sorgente, semplificando il debug.
Ad esempio, traduce:
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):
più facilmente leggibili:
********** 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
Utilizzo
Per utilizzare ndk-stack
, devi prima avere una directory contenente
versioni senza sequenza delle librerie condivise dell'app. Se utilizzi
ndk-build
, queste librerie condivise senza rimozione si trovano in
$PROJECT_PATH/obj/local/<abi>
, dove <abi>
è l'ABI del dispositivo.
Esistono due modi per utilizzare lo strumento. Puoi fornire il testo logcat come input diretto al programma. Ecco alcuni esempi:
adb logcat | $NDK/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi-v7a
Puoi anche utilizzare l'opzione -dump
per specificare il logcat come file di input. Ecco alcuni esempi:
adb logcat > /tmp/foo.txt $NDK/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi-v7a -dump foo.txt
Quando inizia l'analisi dell'output logcat, lo strumento cerca una riga iniziale di asterischi. Ecco alcuni esempi:
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Nota: quando copi e incolli le tracce, non dimenticare questa riga, altrimenti ndk-stack
non funzionerà correttamente.
Altre informazioni
Google Play utilizza ndk-stack
per simbolizzare le analisi dello stack per le app native in Google Play Console. Per informazioni su come abilitare questa funzionalità per la tua app in un ambiente di produzione, scopri come includere un file di simboli di debug nativo per la tua app in Google Play Console.