ndk-stack的使用

原创 2015年12月11日 22:26:55

问题及解决方法

  • jni开发过程中native崩溃log样式如下
F/libc    (12115): Fatal signal 11 (SIGSEGV) at 0x37413144 (code=1), thread 12115 (om.example.test)
I/DEBUG   (  257): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG   (  257): Build fingerprint: 'OPPO/R7007/R7007:4.3/JLS36C/1390465867:user/release-keys'
I/DEBUG   (  257): Revision: '0'
I/DEBUG   (  257): pid: 12115, tid: 12115, name: om.example.test  >>> com.example.test <<<
I/DEBUG   (  257): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 37413144
I/DEBUG   (  257): Abort message: ''
I/DEBUG   (  257):     r0 37413144  r1 00000000  r2 00000001  r3 8e4efac8
I/DEBUG   (  257):     r4 5d9f5f30  r5 5d9f5f88  r6 35413246  r7 4011e20c
I/DEBUG   (  257):     r8 be89a180  r9 57561c7c  sl 415e9040  fp be89a194
I/DEBUG   (  257):     ip 00000001  sp be899d20  lr 400e0ba9  pc 5d8c182e  cpsr 20000030
I/DEBUG   (  257):     d0  000000000000000f  d1  6361436c6c417261
I/DEBUG   (  257):     d2  6e69676562206568  d3  2d2d2d2d2d2d2d2d
I/DEBUG   (  257):     d4  0000000000000000  d5  0000000000000000
I/DEBUG   (  257):     d6  0000000000000000  d7  0000000080000000
I/DEBUG   (  257):     d8  0000000000000000  d9  0000000000000000
I/DEBUG   (  257):     d10 0000000000000000  d11 0000000000000000
I/DEBUG   (  257):     d12 0000000000000000  d13 0000000000000000
I/DEBUG   (  257):     d14 0000000000000000  d15 0000000000000000
  • 如何分析crash log对应的调用栈?只需2步

    1. C:\Users\zzz\Desktop>adb logcat -c && adb logcat > C:\Users\zzz\Desktop\log.txt
    2. C:\Users\zzz\Desktop>ndk-stack -sym C:\androidStudio\android-libac\jni\obj\local\armeabi -dump log.txt
  • 输出如下

********** Crash dump: **********
Build fingerprint: 'OPPO/R7007/R7007:4.3/JLS36C/1390465867:user/release-keys'
pid: 12115, tid: 12115, name: om.example.test  >>> com.example.test <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 37413144
Stack frame I/DEBUG   (  257):     #00  pc 0000682e  /data/app-lib/com.example.test-2/libacd.so: Routine MapsManager::clearAllCache() at C:\androidStudio\android-libac\jni/jni/src/pmaps/MapsManager.cpp:169 (discriminator 1)
Stack frame I/DEBUG   (  257):     #01  pc 00006d09  /data/app-lib/com.example.test-2/libacd.so: Routine MapsManager::startSecureCheck() at C:\androidStudio\android-libac\jni/jni/src/pmaps/MapsManager.cpp:98
Stack frame I/DEBUG   (  257):     #02  pc 00006e47  /data/app-lib/com.example.test-2/libacd.so: Routine assertInvader(ErrorCode*, android::UParcel*) at C:\androidStudio\android-libac\jni/jni/src/pmaps/MapsManager.cpp:21
Stack frame I/DEBUG   (  257):     #03  pc 000060d7  /data/app-lib/com.example.test-2/libacd.so: Routine nativeAssert at C:\androidStudio\android-libac\jni/jni/src/entrance.cpp:70
Stack frame I/DEBUG   (  257):     #04  pc 000203cc  /system/lib/libdvm.so (dvmPlatformInvoke+112)
Stack frame I/DEBUG   (  257):     #05  pc 00050d97  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+398)
Stack frame I/DEBUG   (  257):     #06  pc 00029860  /system/lib/libdvm.so
Stack frame I/DEBUG   (  257):     #07  pc 0002e218  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
Stack frame I/DEBUG   (  257):     #08  pc 0000d0af  /system/lib/libdvm.so

参考

  • android-ndk-r10e/docs/Programmers_Guide/html/md_3__key__topics__debugging__n_d_k-_s_t_a_c_k.html
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cheyiliu/article/details/50269687

Petstore源码追踪记(3)-商业逻辑处理(二)

使用者基本数据浏览流程=======================现在让我们进入主题-Petstore商业逻辑,笔者以使用者基本资料浏览流程为例,请激活cloudscape数据库:cloudscap...
  • bruce
  • bruce
  • 2003-01-28 18:58:00
  • 1634

stack(栈)在android 中的运用

  • 2017年03月28日 15:41
  • 1.43MB
  • 下载

使用 ndk-stack 寻找Android程序Crash的原因

开篇废话很久不研究cocos2d-x了,也不知道如今发展如何了。先前写游戏时会分几块。 主要功能代码都是用C++编写,编辑器用vs android平台相关功能使用 Java 编写,编辑器用 Eclip...
  • change_from_now
  • change_from_now
  • 2016-12-02 17:02:49
  • 3619

Android NDK开发Crash错误定位

在Android开发中,程序Crash分三种情况:未捕获的异常、ANR(Application Not Responding)和闪退(NDK引发错误)。其中未捕获的异常根据logcat打印的堆栈信息很...
  • xyang81
  • xyang81
  • 2015-01-01 19:50:44
  • 28648

android使用ndk-stack调试JNI部分的C/C++代码

法一:使用ndk-stack输出调用堆栈 我这里的ndk-stack位置为:/home/hwh/Android_Project/Environment/android-ndk-r8e 'ndk...
  • oldmtn
  • oldmtn
  • 2013-05-06 11:50:18
  • 15889

ndk-stack使用

1. so库要改成debug模式,在application.apk下加入APP_OPTIM := debug,然后重新编译so库 2 cmd下进入ndk的安装目录,必须进入 3. 执行命令 ad...
  • jdksym
  • jdksym
  • 2016-04-05 21:45:32
  • 662

笔记:ndk-stack和addr2line

笔记:关于ndk开发调试时,获取崩溃堆栈方法1. 使用ndk-stack直接获取c/c++崩溃代码的文件名和行号adb shell logcat | ndk-stack -sym $PROJECT_P...
  • songcf_faith
  • songcf_faith
  • 2015-10-24 14:35:13
  • 477

ndk-stack 学习使用

最近在mac上编译android 版本,各种崩溃让人蛋疼,网上学习了下ndk-stack使用方法。...
  • wanzhihui0000
  • wanzhihui0000
  • 2014-04-04 17:06:46
  • 15373

使用arm-eabi-addr2line, ndk-stack工具跟踪Android调用堆栈

使用arm-eabi-addr2line工具跟踪Android调用堆栈 作者:liangshengyang 转自:http://www.linuxidc.com/Linux/2011-01/318...
  • hylaking
  • hylaking
  • 2012-02-15 10:26:48
  • 15444

ndk-stack使用方法

过去用eclipse跑cocos2d android崩溃了只能出一个Fatal signal信号,现在有了ndk-stack好了一点点,能定位到哪个函数崩溃了,用法如下 我的cocos2d-x and...
  • qiou2719
  • qiou2719
  • 2016-05-27 14:59:00
  • 355
收藏助手
不良信息举报
您举报文章:ndk-stack的使用
举报原因:
原因补充:

(最多只允许输入30个字)