Android native crash log分析

原帖地址:http://blog.csdn.net/huaciom/article/details/6997708

http://pjq.me/wiki/doku.php?id=android:android-jni:android-ndk-stacktrace-analyzer

Android native crash log分析

找到两种方法一种是使用google 的stack工具,一种是使用Analyze android-ndk stack trace.

参考:

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.asm
python parse_stack.py mylib.asm logcat.txt

举例:

D:\stack>python parse_stack.py libslpi.asm logcat.txt
0x000b7e80:            pjsua_acc_unregister + 0x0068

D:\stack>ls
libslpi.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.txt
make: build/core/envsetup.mk: No such file or directory
make: *** No rule to make target `build/core/envsetup.mk'.
Searching for native crashes in logcat.txt
Reading 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 afd11cd0
arm-eabi-addr2line: '/system/lib/libc.so': No such file
arm-eabi-addr2line: '/system/lib/libc.so': No such file
arm-eabi-addr2line: '/system/lib/libc.so': No such file
arm-eabi-addr2line: '/system/lib/libc.so': No such file
arm-eabi-addr2line: '/system/lib/libc.so': No such file
arm-eabi-addr2line: '/system/lib/libc.so': No such file
arm-eabi-addr2line: '/system/lib/libc.so': No such file
arm-eabi-addr2line: '/system/lib/libc.so': No such file
arm-eabi-addr2line: '/system/lib/libc.so': No such file
arm-eabi-addr2line: '/system/lib/libc.so': No such file
arm-eabi-addr2line: '/system/lib/libc.so': No such file
arm-eabi-addr2line: '/system/lib/libc.so': No such file
arm-eabi-addr2line: '/system/lib/libc.so': No such file

Stack Trace:
  ADDR      FUNCTION              FILE:LINE
  00011cd0  (unknown)             (unknown)
  00018fac  (unknown)             (unknown)
  000b7e80  pjsua_acc_unregister  ??:0

Stack 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.txt
make: build/core/envsetup.mk: No such file or directory
make: *** No rule to make target `build/core/envsetup.mk'.  Stop.
Searching for native crashes in logcat.txt
Reading 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 afd11cd0
arm-eabi-addr2line: './system/lib/libc.so': No such file
arm-eabi-addr2line: './system/lib/libc.so': No such file
arm-eabi-addr2line: './data/data/com.arcsoft.ddtui/lib/libslpi.so': No such file
arm-eabi-addr2line: './system/lib/libc.so': No such file
arm-eabi-addr2line: './system/lib/libc.so': No such file
arm-eabi-addr2line: './system/lib/libc.so': No such file
arm-eabi-addr2line: './system/lib/libc.so': No such file
arm-eabi-addr2line: './system/lib/libc.so': No such file
arm-eabi-addr2line: './system/lib/libc.so': No such file
arm-eabi-addr2line: './system/lib/libc.so': No such file
arm-eabi-addr2line: './system/lib/libc.so': No such file
arm-eabi-addr2line: './system/lib/libc.so': No such file
arm-eabi-addr2line: './system/lib/libc.so': No such file
arm-eabi-addr2line: './system/lib/libc.so': No such file
arm-eabi-addr2line: './data/data/com.arcsoft.ddtui/lib/libslpi.so': No such file
arm-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.txt
make: build/core/envsetup.mk: No such file or directory
make: *** No rule to make target `build/core/envsetup.mk'.  Stop.
Searching for native crashes in logcat.txt
Reading 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 afd11cd0

Stack Trace:
  ADDR      FUNCTION              FILE:LINE
  00011cd0  pclose                /usr/local/google/home/digit/android/main/cupc
ake/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  ??:0

Stack 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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android原生崩溃(android native crash)是指在Android平台上,由于代码执行错误或者资源耗尽等原因,导致应用程序无法正常运行而崩溃或者闪退的现象。原生崩溃产生的原因可能是由于C或者C++代码编写错误、内存溢出、线程竞争等。针对原生崩溃问题,开发人员需要使用调试工具进行定位和修复。 ### 回答2: Android Native Crash发生在安卓应用程序运行时,由于C或C++库的错误或者其他原因导致应用程序崩溃。有时候Native Crash可能会影响整个设备,尤其是当Native Crash发生在系统级别的代码中时。 产生Native Crash的原因通常包括以下几个方面: 1. 内存管理问题:Native Crash通常与内存管理问题相关,这可能是由于访问未初始化的内存,使用错误的指针或释放已释放的内存等原因引起的。 2. 硬件问题:Native Crash也可能与设备相关的硬件问题有关,例如访问不可用的硬件资源或硬件设备故障。 3. 应用程序代码问题:Native Crash可能发生在应用程序代码的错误、资源泄漏、堆栈溢出等问题引起的。 4. 第三方库问题:Native Crash也可能由第三方库中的错误或bug引起。这些库可能没有经过充分的测试,或者与设备硬件不兼容。 为了更好地解决Native Crash问题,开发者可以通过日志或崩溃报告(Crash Report)来检测和分析崩溃日志,并查看堆栈跟踪信息来确定导致Native Crash的来源。在开发过程中,经常使用除了自己编写的代码之外的第三方库时,还可以考虑使用崩溃的回溯工具,如Firebase Crashlytics等。 总之,Native CrashAndroid应用程序开发过程中经常遇到的问题,它可能会对用户体验和开发进度产生重大影响,因此开发者需要强化对Native Crash的理解和分析能力,以更好地解决Native Crash的问题。 ### 回答3: Android Native Crash,指的是在 Android 系统中发生的本地崩溃。本地崩溃是指应用程序使用本地代码,而不是 Java 代码,导致应用程序崩溃的问题。本地代码可以是编写在 C/C++ 等语言中的库,或是应用程序本身所编写的 Native 代码。 本地代码崩溃后,会在应用程序崩溃的同时发生。本地崩溃可发生在 Android 应用程序中的任何部分,比如,应用程序本地库、Android 系统库等等。大多数情况下,本地崩溃是由于访问无效内存、访问不合法指针、数组越界等问题引起的。 为了解决本地崩溃问题,Android 提供了一些工具和技术。比如,使用 ndk-stack 工具可以解析本地崩溃日志。Android Studio 也提供了一些工具来分析应用程序崩溃的原因。同时,我们也可以在应用程序中添加自定义的日志跟踪信息,以便更好地了解应用程序的崩溃原因。 还有一些其他的技术可以使用,如使用 Google 的 Crashlytics 来跟踪应用程序的崩溃问题。这个平台可以帮助开发者收集和分析应用程序在用户设备上的崩溃信息,并彻底解决这些问题。此外,Android 还提供了一些实用工具和技术,如 ANR(Application Not Responding)错误处理器、Tracer for OpenGL ES 和 Traceview 示例等。 总之,Android Native CrashAndroid 系统中常见的崩溃问题之一。了解它的原因并采用适当的解决方案可以使得我们更好地保持我们的应用程序的稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值