下面来逐行解读:

1. ndk crash log以 *** *** *** *** *** 开始.

2. 第一行 Build fingerprint: 'google/razorg/deb:4.4.2/KOT49H/937116:user/release-keys' 指明了运行的Android版本, 如果您有多份crash dump的话这个信息就比较有用了.

3. 接着一行显示的是当前的线程id(pid)和进程id(tid). 如果当前崩溃的线程是主线程的话, pid和tid会是一样的~

4. 第四行, 显示的是unix信号. 这里的 signal 11 , 即 SIGSEGV , 表示段错误, 是最常见的信号.( 什么是unix信号 , 什么是 SIGSEGV )

5. 接下来的部分是系统寄存器的dump信息.

rX( X=[0~9] ): 代表整数寄存器

dX( X=[0~31]): 是浮点指针寄存器

fp (or r11) : 指向当前正在执行的函数的堆栈底.

ip (or r12) : 一个寄存器, 我也没弄明白是干啥的.

sp (or r13) : 当前正在执行的函数的堆栈顶.(跟fp相对应)

lr (or r14) : link register . 简单来说, 当当前指令执行完了, 就会从这个寄存器获取地址, 来知道需要返回到哪里继续执行.

pc (or r15) : program counter. 存放下一条指令的地址.

cpsr : Current Program Status Register. 表示当前运行环境和状态的一些字节位.

Crash dump还包含PC之前和之后的一些内存字段.

最后, 是崩溃时的调用堆栈. 如果你执行的是debug版本, 还能还原一些c++代码.

利用ndk-stack定位崩溃代码

上面的一些信息能简单的帮你定位以下问题. 如果信息量还不够大的话, 那就还有最后一招: 还原历史.

Android NDK 自从版本R6开始, 提供了一个工具 ndk-stack ( 在目录 {ndk_root}/ 中 ). 这个工具能自动分析dump下来的crash log, 将崩溃时的调用内存地址和c++代码一行一行对应起来.

我们先看一下用法, 执行命令 ndk-stack --help

Usage:

ndk-stack -sym [-dump ]

-sym  Contains full path to the root directory for symbols.

-dump Contains full path to the file containing the crash dump.

This is an optional parameter. If ommited, ndk-stack will

read input data from stdin

-dump参数很容易理解, 即dump下来的log文本文件. ndk-stack 会分析此文件.

-sym参数就是你android项目下,编译成功之后, obj 目录下的文件.

下面我们就来示范一下:

$ adb logcat | ndk-stack -sym ./obj/local/armeabi

********** Crash dump: **********

Build fingerprint: 'htc_wwe/htc_bravo/bravo:2.3.3/

GRI40/96875.1:user/release-keys'

pid: 1723, tid: 1743  >>> com.packtpub.droidblaster <<<

signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0000000c

Stack frame #00  pc 00010a2c  /data/data/com.packtpub.droidblaster/lib/libdroidblaster.so: Routine update in /home/packt/Project/Chapter11/DroidBlaster_Part11/jni/TimeService.cpp:25

Stack frame #01  pc 00009fcc  /data/data/com.packtpub.droidblaster/lib/libdroidblaster.so: Routine onStep in /home/packt/Project/Chapter11/DroidBlaster_Part11/jni/DroidBlaster.cpp:53

Stack frame #02  pc 0000a348  /data/data/com.packtpub.droidblaster/lib/libdroidblaster.so: Routine run in /home/packt/Project/Chapter11/DroidBlaster_Part11/jni/EventLoop.cpp:49

Stack frame #03  pc 0000f994  /data/data/com.packtpub.droidblaster/lib/libdroidblaster.so: Routine android_main in /home/packt/Project/Chapter11/DroidBlaster_Part11/jni/Main.cpp:31

...

熟悉的代码出现啦~~

上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。

22/2<12

android ndk 段错误,利用NDK崩溃日志查找BUG相关推荐

  1. android ndk 段错误,android crash之段错误原因及分析方法

    在解决app/frameworks客户问题的过程中经常碰到段错误的问题,在Aplog中搜索fatal关键字会碰到类似F/libc    ( 6721): Fatal signal 11 (SIGSEG ...

  2. android ndk 博客,Android Studio 2上利用NDK进行OpenCV 3.1开发

    本文主要分为两部分,第一部分采用实验性插件(Gradle Experimental Plugin)建立一个一般性的NDK应用,第二部分采用稳定版插件建立一个简单的灰度处理的OpenCV JNI应用. ...

  3. Android之用UncaughtExceptionHandler实现保存崩溃日志到sdcard目录下的文件夹

    1.异常和UncaughtExceptionHandler的介绍 1).Java异常处理机制中: 如果抛出的是Exception异常的话,需要有try catch进行处理,属于可以捕获exceptio ...

  4. Cocos2dx-如何利用NDK分析崩溃日志

    本文转载于:http://www.cnblogs.com/jhzhu/p/3801640.html 背景介绍 本文主要内容: 利用android的crash log来对c++开发的android应用进 ...

  5. 【Android NDK 开发】NDK C/C++ 代码崩溃调试 - Tombstone 报错信息日志文件分析 ( 获取 tombstone_0X 崩溃日志信息 )

    文章目录 一.崩溃信息描述 二.手机命令行操作 三.电脑命令行操作 四.Tombstone 内容 Tombstone 报错信息日志文件被保存在了 /data/tombstones/ 目录下 , 先 R ...

  6. 利用系统提供的崩溃日志解Native层Bug

    2019独角兽企业重金招聘Python工程师标准>>> 对Android开发者来讲,尤其是使用NDK编写Native层代码的开发者,在编码过程中通常会碰到各种各样的问题.追踪问题的方 ...

  7. ios 打印 详细错误日志_关于Xcode不能打印崩溃日志

    最近在调试应用的时候发现了一个问题, 就是Xcode的控制台不打印Crash日志. 几经周折终于发现了问题. 因为不能打印日志, 开始以为是我没有设置 NSSetUncaughtExceptionHa ...

  8. 【Android】Eclipse自动编译NDK/JNI的三种方法

    [Android]Eclipse自动编译NDK/JNI的三种方法 SkySeraph Sep. 18th  2014 Email:skyseraph00@163.com 更多精彩请直接访问SkySer ...

  9. 代码:android崩溃日志收集和处理

    用来处理android崩溃日志收集的代码,详情的使用请转:android崩溃日志收集和处理 第一个类 /** * 异常捕捉实现类 */ public class ErrorCaughtimplemen ...

最新文章

  1. 使用应用程序(Java/Python)访问MaxCompute Lightning进行数据开发
  2. MySQL 安全性知识要点
  3. mysql cascade|restrict|no action|set null__mysql 外键的几种约束
  4. IO流-LineNumberReader
  5. 题目SPOOLing系统的设计与实现
  6. 安装python扩展库时只能使用pip_使用pip安装Python扩展库的方法
  7. Git前世今生-版本控制软件的发展
  8. mysql5.0查询表_Mysql5.0查询表结构 | 学步园
  9. thinkpad T580加装内存条
  10. 突发奇想:用单片机开发一款最纯粹的智能水杯方案
  11. (SWAT-2)SWAT中土地利用数据库建立
  12. React启动报错These dependencies were not found:
  13. 2019河南省第十二届ACM省赛原题题目及省赛榜单
  14. 小蓝本 第一本 《因式分解技巧》 第八章 多项式的一次因式 笔记 (第八天)
  15. 玩股票的人都是接盘侠
  16. 将Excel中的数据导入html以及将html表格数据导出Excel
  17. java 水印排版_java图片加水印代码 最好有实例!!!先谢了!!
  18. [转]信息安全相关理论题(六)
  19. BLE蓝牙广播和扫描主要数据设置解析与总结
  20. 【React】【Ant Design】引入阿里矢量图

热门文章

  1. Ubuntu22.04下安装OpenFOAM
  2. novate 的混淆出错
  3. 连连支付与Shopee达成战略合作,全面进军东南亚市场!
  4. 使用NetFlow分析互联网网络异常流量
  5. azeroth-event轻量级事件驱动框架
  6. 苹果产品设计的五大原则
  7. Flash在多标签浏览器中的问题
  8. 全球细胞和组织培养试剂行业调研及趋势分析报告
  9. win10系统用虚拟机装win7一直停留在这个画面,请问大家什么这是问题
  10. c语言程序设计说句心里话,长春版小学五年级下册语文《摇篮歌》 教案