android ndk 段错误,利用NDK崩溃日志查找BUG
下面来逐行解读:
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相关推荐
- android ndk 段错误,android crash之段错误原因及分析方法
在解决app/frameworks客户问题的过程中经常碰到段错误的问题,在Aplog中搜索fatal关键字会碰到类似F/libc ( 6721): Fatal signal 11 (SIGSEG ...
- android ndk 博客,Android Studio 2上利用NDK进行OpenCV 3.1开发
本文主要分为两部分,第一部分采用实验性插件(Gradle Experimental Plugin)建立一个一般性的NDK应用,第二部分采用稳定版插件建立一个简单的灰度处理的OpenCV JNI应用. ...
- Android之用UncaughtExceptionHandler实现保存崩溃日志到sdcard目录下的文件夹
1.异常和UncaughtExceptionHandler的介绍 1).Java异常处理机制中: 如果抛出的是Exception异常的话,需要有try catch进行处理,属于可以捕获exceptio ...
- Cocos2dx-如何利用NDK分析崩溃日志
本文转载于:http://www.cnblogs.com/jhzhu/p/3801640.html 背景介绍 本文主要内容: 利用android的crash log来对c++开发的android应用进 ...
- 【Android NDK 开发】NDK C/C++ 代码崩溃调试 - Tombstone 报错信息日志文件分析 ( 获取 tombstone_0X 崩溃日志信息 )
文章目录 一.崩溃信息描述 二.手机命令行操作 三.电脑命令行操作 四.Tombstone 内容 Tombstone 报错信息日志文件被保存在了 /data/tombstones/ 目录下 , 先 R ...
- 利用系统提供的崩溃日志解Native层Bug
2019独角兽企业重金招聘Python工程师标准>>> 对Android开发者来讲,尤其是使用NDK编写Native层代码的开发者,在编码过程中通常会碰到各种各样的问题.追踪问题的方 ...
- ios 打印 详细错误日志_关于Xcode不能打印崩溃日志
最近在调试应用的时候发现了一个问题, 就是Xcode的控制台不打印Crash日志. 几经周折终于发现了问题. 因为不能打印日志, 开始以为是我没有设置 NSSetUncaughtExceptionHa ...
- 【Android】Eclipse自动编译NDK/JNI的三种方法
[Android]Eclipse自动编译NDK/JNI的三种方法 SkySeraph Sep. 18th 2014 Email:skyseraph00@163.com 更多精彩请直接访问SkySer ...
- 代码:android崩溃日志收集和处理
用来处理android崩溃日志收集的代码,详情的使用请转:android崩溃日志收集和处理 第一个类 /** * 异常捕捉实现类 */ public class ErrorCaughtimplemen ...
最新文章
- 使用应用程序(Java/Python)访问MaxCompute Lightning进行数据开发
- MySQL 安全性知识要点
- mysql cascade|restrict|no action|set null__mysql 外键的几种约束
- IO流-LineNumberReader
- 题目SPOOLing系统的设计与实现
- 安装python扩展库时只能使用pip_使用pip安装Python扩展库的方法
- Git前世今生-版本控制软件的发展
- mysql5.0查询表_Mysql5.0查询表结构 | 学步园
- thinkpad T580加装内存条
- 突发奇想:用单片机开发一款最纯粹的智能水杯方案
- (SWAT-2)SWAT中土地利用数据库建立
- React启动报错These dependencies were not found:
- 2019河南省第十二届ACM省赛原题题目及省赛榜单
- 小蓝本 第一本 《因式分解技巧》 第八章 多项式的一次因式 笔记 (第八天)
- 玩股票的人都是接盘侠
- 将Excel中的数据导入html以及将html表格数据导出Excel
- java 水印排版_java图片加水印代码 最好有实例!!!先谢了!!
- [转]信息安全相关理论题(六)
- BLE蓝牙广播和扫描主要数据设置解析与总结
- 【React】【Ant Design】引入阿里矢量图