下面来逐行解读:

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. python3多进程 pool manager_python多进程multiprocessing Pool相关问题
  2. 机器学习和深度学习到底怎么学?顶尖专家吴恩达告诉你
  3. java编写简单计算器_编写java程序简单计算器
  4. OpenDataSource和OPENROWSET
  5. Mac安装 ohmyzsh发生443错误
  6. AndroidStudio中Flutter打包APK
  7. json在线解析工具大集合
  8. 做 局域网聊天 的人越来越多了
  9. lsof 命令实用用法介绍
  10. 138. 复制带随机指针的链表
  11. matlab liccode,车牌识别的matlab程序--(详细注释,并有使用注意点)
  12. 关于移动端设备适配的问题
  13. F2FS 基础知识一
  14. Python菜鸟起飞day2--数据类型(元组,字典,字符串)
  15. 自己做量化交易软件(36)小白量化实战9--小白量化回测面板设计
  16. matlab中如何保存脚本,matlab保存fig文件,matlab如何保存fig
  17. GRE词汇下载:与希腊神话有关的词汇
  18. 2021年最新版Web前端学习路线图-前端小白入门必读-推荐
  19. 微信公众号python开发_用python如何开发微信公共帐号?
  20. 神一般的科学“超人”尼古拉-特斯拉!

热门文章

  1. python读取xlsm文件_Python读写EXCEL文件常用方法大全
  2. 刘作虎会是OPPO、一加和realme们的领路人吗?
  3. 记录:数据库(MySQL)之多表查询
  4. 猜数字 剪刀石头布
  5. 龙兵汽车4S店系统v1.10.15 汽车销售 汽车营销 汽车小程序
  6. 小程序canvas生成海报
  7. linux 中的outb outw inb inw
  8. 名编辑电子杂志大师教程 | 名编辑电子杂志离线阅读(ipad/iphone)
  9. 人工智能培训师ai培训师NLP讲师叶梓:人工智能之最新NLP自然语言处理技术与实战-16
  10. 珠心算测验(爆炸型)