原文地址::http://wiki.impjq.net/doku.php?id=android:android-jni:android-ndk-stacktrace-analyzer
找到兩種方法一種是使用google 的stack工具,一種是使用Analyze
android-ndk stack trace.
參考:
- http://code.google.com/p/android-ndk-stacktrace-analyzer/wiki/Usage
- http://source.android.com/porting/debugging_native.html
stack下載:
- http://bootloader.wdfiles.com/local--files/linux%3Aandroid%3Acrashlog/stack
android-ndk-stacktrace-analyzer用法
android-ndk/android-ndk-1.6_r1/build/prebuilt/linux-x86/arm-eabi-4.2.1/bin/arm-eabi-objdump -S mylib.so > mylib.asmpython parse_stack.py mylib.asm logcat.txt
舉例:
D:/stack>python parse_stack.py libslpi.asm logcat.txt0x000b7e80: pjsua_acc_unregister + 0x0068D:/stack>lslibslpi.asm libslpi.so logcat.txt parse_stack.py stack.py
stack用法:
python stack.py logcat.txt
說明:stack看起來是google內部使用的工具,在windows上跑不起來,需要在Linux環境下,還有使用的時候會提示so檔案的位置不存在,按照它的要求,建立相應的目錄,並放入so檔案就可以了。舉例:
root@impjq:~/stack# python stack.py logcat.txtmake: build/core/envsetup.mk: No such file or directorymake: *** No rule to make target `build/core/envsetup.mk'.Searching for native crashes in logcat.txtReading symbols frompid: 4538, tid: 4553 >>> com.arcsoft.ddtui <<<signal 11 (SIGSEGV), fault addr deadbaad r0 00000000 r1 afd14679 r2 00000027 r3 00000070 r4 afd42328 r5 00000000 r6 00000000 r7 00000cb0 r8 80fac890 r9 485d8d8c 10 485d8ce4 fp 0000033c ip 00001770 sp 485d8880 lr deadbaad pc afd11cd0arm-eabi-addr2line: '/system/lib/libc.so': No such filearm-eabi-addr2line: '/system/lib/libc.so': No such filearm-eabi-addr2line: '/system/lib/libc.so': No such filearm-eabi-addr2line: '/system/lib/libc.so': No such filearm-eabi-addr2line: '/system/lib/libc.so': No such filearm-eabi-addr2line: '/system/lib/libc.so': No such filearm-eabi-addr2line: '/system/lib/libc.so': No such filearm-eabi-addr2line: '/system/lib/libc.so': No such filearm-eabi-addr2line: '/system/lib/libc.so': No such filearm-eabi-addr2line: '/system/lib/libc.so': No such filearm-eabi-addr2line: '/system/lib/libc.so': No such filearm-eabi-addr2line: '/system/lib/libc.so': No such filearm-eabi-addr2line: '/system/lib/libc.so': No such fileStack Trace: ADDR FUNCTION FILE:LINE 00011cd0 (unknown) (unknown) 00018fac (unknown) (unknown) 000b7e80 pjsua_acc_unregister ??:0Stack Data: ADDR VALUE FILE:LINE/FUNCTION 485d8840 00000340 485d8844 afd146a9 (unknown) (unknown) 485d8848 afd42498 (unknown) (unknown) 485d884c afd43bb4 (unknown) (unknown) 485d8850 00000000 485d8854 afd156c3 (unknown) (unknown) 485d8858 afd14679 (unknown) (unknown) 485d885c afd14679 (unknown) (unknown) 485d8860 00000070 485d8864 afd42328 (unknown) (unknown) 485d8868 00000000 485d886c 485d8894 485d8870 00000cb0 485d8874 afd1491b (unknown) (unknown) 485d8878 df002777 485d887c e3a070ad 485d8880 485d8df4 485d8884 80fad540 485d8888 00000cb0 485d888c afd14c81 (unknown) (unknown) 485d8890 afd4254c (unknown) (unknown) 485d8894 fffffbdf 485d8898 00000002 485d889c 485d8df4 485d88a0 80fad540 485d88a4 afd18fb1 (unknown) (unknown) 485d88a8 00000946 485d88ac 00000946 485d88b0 80f5b018 ??:0 ?? 485d88b4 80eb7e84 ??:0 pjsua_acc_unregister
指定路徑:
root@impjq:~/stack# python stack.py --symbols-dir=. logcat.txt
這樣會提示某些lib不存在
root@impjq:~/stack# python stack.py --symbols-dir=. logcat.txtmake: build/core/envsetup.mk: No such file or directorymake: *** No rule to make target `build/core/envsetup.mk'. Stop.Searching for native crashes in logcat.txtReading symbols from .pid: 4538, tid: 4553 >>> com.arcsoft.ddtui <<<signal 11 (SIGSEGV), fault addr deadbaad r0 00000000 r1 afd14679 r2 00000027 r3 00000070 r4 afd42328 r5 00000000 r6 00000000 r7 00000cb0 r8 80fac890 r9 485d8d8c 10 485d8ce4 fp 0000033c ip 00001770 sp 485d8880 lr deadbaad pc afd11cd0arm-eabi-addr2line: './system/lib/libc.so': No such filearm-eabi-addr2line: './system/lib/libc.so': No such filearm-eabi-addr2line: './data/data/com.arcsoft.ddtui/lib/libslpi.so': No such filearm-eabi-addr2line: './system/lib/libc.so': No such filearm-eabi-addr2line: './system/lib/libc.so': No such filearm-eabi-addr2line: './system/lib/libc.so': No such filearm-eabi-addr2line: './system/lib/libc.so': No such filearm-eabi-addr2line: './system/lib/libc.so': No such filearm-eabi-addr2line: './system/lib/libc.so': No such filearm-eabi-addr2line: './system/lib/libc.so': No such filearm-eabi-addr2line: './system/lib/libc.so': No such filearm-eabi-addr2line: './system/lib/libc.so': No such filearm-eabi-addr2line: './system/lib/libc.so': No such filearm-eabi-addr2line: './system/lib/libc.so': No such filearm-eabi-addr2line: './data/data/com.arcsoft.ddtui/lib/libslpi.so': No such filearm-eabi-addr2line: './data/data/com.arcsoft.ddtui/lib/libslpi.so': No such file
按照它的提示,建立相應的目錄就可以了,其中libc.so我是直接從ndk裡拷貝過來的,這樣正常的運行結果如下:
root@impjq:~/stack# python stack.py --symbols-dir=. logcat.txtmake: build/core/envsetup.mk: No such file or directorymake: *** No rule to make target `build/core/envsetup.mk'. Stop.Searching for native crashes in logcat.txtReading symbols from .pid: 4538, tid: 4553 >>> com.arcsoft.ddtui <<<signal 11 (SIGSEGV), fault addr deadbaad r0 00000000 r1 afd14679 r2 00000027 r3 00000070 r4 afd42328 r5 00000000 r6 00000000 r7 00000cb0 r8 80fac890 r9 485d8d8c 10 485d8ce4 fp 0000033c ip 00001770 sp 485d8880 lr deadbaad pc afd11cd0Stack Trace: ADDR FUNCTION FILE:LINE 00011cd0 pclose /usr/local/google/home/digit/android/main/cupcake/android/bionic/libc/unistd/popen.c:146 00018fac strtod /opt/digit/android/main/cupcake/android/bionic/libc/stdlib/strtod.c:1327 000b7e80 pjsua_acc_unregister ??:0Stack Data: ADDR VALUE FILE:LINE/FUNCTION 485d8840 00000340 485d8844 afd146a9 /usr/local/google/home/digit/android/main/cupcake/android/bionic/libc/stdio/setvbuf.c:84 setvbuf 485d8848 afd42498 libgcc2.c:0 __timer_table 485d884c afd43bb4 libgcc2.c:0 __timer_table 485d8850 00000000 485d8854 afd156c3 /usr/local/google/home/digit/android/main/cupcake/android/bionic/libc/stdio/vfprintf.c:396 vfprintf 485d8858 afd14679 /usr/local/google/home/digit/android/main/cupcake/android/bionic/libc/stdio/setvbuf.c:67 setvbuf 485d885c afd14679 /usr/local/google/home/digit/android/main/cupcake/android/bionic/libc/stdio/setvbuf.c:67 setvbuf 485d8860 00000070 485d8864 afd42328 libgcc2.c:0 __timer_table 485d8868 00000000 485d886c 485d8894 485d8870 00000cb0 485d8874 afd1491b /usr/local/google/home/digit/android/main/cupcake/android/bionic/libc/stdio/tempnam.c:50 tempnam 485d8878 df002777 485d887c e3a070ad 485d8880 485d8df4 485d8884 80fad540 485d8888 00000cb0 485d888c afd14c81 /usr/local/google/home/digit/android/main/cupcake/android/bionic/libc/stdio/ungetc.c:139 ungetc 485d8890 afd4254c libgcc2.c:0 __timer_table 485d8894 fffffbdf 485d8898 00000002 485d889c 485d8df4 485d88a0 80fad540 485d88a4 afd18fb1 /opt/digit/android/main/cupcake/android/bionic/libc/stdlib/strtod.c:1327 strtod 485d88a8 00000946 485d88ac 00000946 485d88b0 80f5b018 ??:0 ?? 485d88b4 80eb7e84 ??:0 pjsua_acc_unregister