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 ...
最新文章
- python3多进程 pool manager_python多进程multiprocessing Pool相关问题
- 机器学习和深度学习到底怎么学?顶尖专家吴恩达告诉你
- java编写简单计算器_编写java程序简单计算器
- OpenDataSource和OPENROWSET
- Mac安装 ohmyzsh发生443错误
- AndroidStudio中Flutter打包APK
- json在线解析工具大集合
- 做 局域网聊天 的人越来越多了
- lsof 命令实用用法介绍
- 138. 复制带随机指针的链表
- matlab liccode,车牌识别的matlab程序--(详细注释,并有使用注意点)
- 关于移动端设备适配的问题
- F2FS 基础知识一
- Python菜鸟起飞day2--数据类型(元组,字典,字符串)
- 自己做量化交易软件(36)小白量化实战9--小白量化回测面板设计
- matlab中如何保存脚本,matlab保存fig文件,matlab如何保存fig
- GRE词汇下载:与希腊神话有关的词汇
- 2021年最新版Web前端学习路线图-前端小白入门必读-推荐
- 微信公众号python开发_用python如何开发微信公共帐号?
- 神一般的科学“超人”尼古拉-特斯拉!
热门文章
- python读取xlsm文件_Python读写EXCEL文件常用方法大全
- 刘作虎会是OPPO、一加和realme们的领路人吗?
- 记录:数据库(MySQL)之多表查询
- 猜数字 剪刀石头布
- 龙兵汽车4S店系统v1.10.15 汽车销售 汽车营销 汽车小程序
- 小程序canvas生成海报
- linux 中的outb outw inb inw
- 名编辑电子杂志大师教程 | 名编辑电子杂志离线阅读(ipad/iphone)
- 人工智能培训师ai培训师NLP讲师叶梓:人工智能之最新NLP自然语言处理技术与实战-16
- 珠心算测验(爆炸型)