Android jni Crash堆栈信息分析
NDK编译生成的.so文件作为程序的一部分,在运行发生异常时同样会造成程序崩溃。不同于Java代码异常造成的程序崩溃,在NDK的异常发生时,程序在Android设备上都会立即退出,即通常所说的闪退,而不会弹出“程序xxx无响应,是否立即关闭”之类的提示框。
NDK是使用C/C++来进行开发的,熟悉C/C++的程序员都知道,指针和内存管理是最重要也是最容易出问题的地方,稍有不慎就会遇到诸如内存无效访 问、无效对象、内存泄露、堆栈溢出等常见的问题,最后都是同一个结果:程序崩溃。例如我们常说的空指针错误,就是当一个内存指针被置为空(NULL)之后 再次对其进行访问;另外一个经常出现的错误是,在程序的某个位置释放了某个内存空间,而后在程序的其他位置试图访问该内存地址,这就会产生无效地址错误。 常见的错误类型如下:
初始化错误;
访问错误;
内存泄露;
参数错误;
堆栈溢出;
类型转换错误;
数字除0错误。
1、第一种方法:ndk-stack
adb shell logcat|ndk-stack -sym $PROJECT_PATH/obj/local/armeabi
或者先获取日志再分析
adb shell logcat > log.txt
ndk-stack -sym $PROJECT_PATH/obj/local/armeabi -udmp log.txt
2、第二种方法:使用addr2line和objdump命令
这两个方法可以揭示ndk-stack命令的工作原理是什么
arm-linux-adnroideabi-addr2line -e obj/local/armeabi/*.so
地址   
:定位行数
arm-linux-adnroideabi-addr2line -f -e obj/local/armeabi/*.so
地址 :定位函数信息
3、第三方SDK
TestFlight——完美的iOS
app测试方案:http://onevcat.com/2012/01/testflight/
国外的crittercism
国内的TestinTestin:收费
TestFlight——完美的iOS app测试方案
崩溃报告类:
Crittercism 个人用了一段时间,表现很稳定,但是版本更新时设置比较麻烦
Crashlytics 相当优雅方便,最近被Twitter收购。十分推荐
用户行为统计类:
Flurry 这个太有名了,不多说了
Countly 好处是轻量开源,数据可以自己掌控
Bugsense
但是在“发布前”测试分发这个环节上,基本还没有出现能与TestFlight相匹敌的服务出现,因此如果有这方面的测试需求的话,TF依然是开发人员的首选。
Android jni Crash堆栈信息分析的更多相关文章
- C++ crash 堆栈信息获取(三篇文章)
		
最近在做程序异常时堆栈信息获取相关工作,上一篇文章成功的在程序creash时写下了dump文件,而有些情况写dump文件是 不可以的,比如在jni开发时,C++只做底层处理,而整个项目是android ...
 - C++ crash 堆栈信息获取
		
最近在做程序异常时堆栈信息获取相关工作,上一篇文章成功的在程序creash时写下了dump文件,而有些情况写dump文件是 不可以的,比如在jni开发时,C++只做底层处理,而整个项目是android ...
 - C++ crash 堆栈信息获取(三篇)
		
最近在做程序异常时堆栈信息获取相关工作,上一篇文章成功的在程序creash时写下了dump文件,而有些情况写dump文件是 不可以的,比如在jni开发时,C++只做底层处理,而整个项目是android ...
 - Android Tombstone/Crash的log分析和定位
		
有一句话叫做常在河边走,哪有不湿鞋.我们这些研究和开发Android的project师正应了这句话,相必大家在调试的时候常常会遇到这么个东西吧 *** *** *** *** *** *** *** ...
 - Android Native crash日志分析
		
在Android应用crash的类型中,native类型crash应该是比较难的一种了,因为大家接触的少,然后相对也要多转几道工序,所有大部分对这个都比较生疏.虽然相关文章也有很多了,但是我在刚开始学 ...
 - 还原堆栈信息,分析地形系统使用ASTC格式的纹理导致Crash的问题
		
0x00 前言 在这篇文章中,我们选择了过去一周Unity官方社区交流群中比较有代表性的几个问题,总结在这里和大家进行分享.主要涵盖了IL2CPP.Scripting.Virtual Reality. ...
 - Android Native/Tombstone Crash Log 详细分析(转)
		
转自:http://weibo.com/p/230418702c2db50102vc2h Android 虽然已经有好几年了,但是NDK的开放速度却非常缓慢,所以目前网络上针对对Android Nat ...
 - 获取Android崩溃crash信息并写入日志发送邮件
		
一.实现Thread.UncaughtExceptionHandlerUnChecked异常发生时,由于没有相应的try…catch处理该异常对象,所以Java运行环境将会终止,程序将退出,也就是我们 ...
 - Java内存泄漏分析系列之一:使用jstack定位线程堆栈信息
		
原文地址:http://www.javatang.com 前一段时间上线的系统升级之后,出现了严重的高CPU的问题,于是开始了一系列的优化处理之中,现在将这个过程做成一个系列的文章. 基本概念 在对J ...
 
随机推荐
- Flask速成项目:Flask实现计算机资源的实时监控
			
很多人都说使用Python开发WEB应用非常方便,那么对于WEB新手来说,到底有多方便呢?本文即将展示给你Python的魔法. 本文将通过一个实例:Flask实现计算机资源的实时监控,迅速带你入门Fl ...
 - Metasploit运行环境内存不要低于2GB
			
Metasploit运行环境内存不要低于2GB Metasploit启用的时候,会占用大量的内存.如果所在系统剩余内存不足(非磁盘剩余空间),会直接导致运行出错.这种情况特别容易发生在虚拟机Kali ...
 - Centos7使用kubeadm部署kubernetes-1.11.2
			
1.安装方式 1. 传统方式,以下组件全部运行在系统层面(yum或者rpm包),都为系统级守护进程 2. kubeadm方式,master和node上的组件全部运行为pod容器,k8s也为pod ...
 - 操作系统PV编程题目总结一
			
1.今有一个文件F供进程共享,现把这些进程分为A.B两组,规定同组的进程可以同时读文件F:但当有A组(或B组)的进程在读文件F时就不允许B组(或A组)的进程读文件F.试用P.V操作(记录型信号量)来进 ...
 - Android全平台书籍
			
<Android Database Programming>:全书研究Android平台下的数据库技术. <Android Application Programming with ...
 - vue的环境安装(一node环境)
			
话不多说都知道vue是基于node环境的.肯定是要安装node环境的 1.node官网下载https://nodejs.org/en/download/对应的版本我的是win的 2.双击下载下来的安装 ...
 - 《SQL优化入门》讲座总结
			
MySQL运行机制 MySQL每个query只能运行在一个CPU上,更多的CPU,更快的CPU会更有利于并发 MySQL执行计划 Using filesort: 表示无法利用索引完成排序,也有可能是因 ...
 - vue组件之间的传值方式
			
一.父组件向子组件传值方式 1.1父组件向子组件传数据方式 <!DOCTYPE html> <html lang="en"> <head> &l ...
 - python     MVC、MTV 框架介绍  Django 模板系统常用语法
			
Django 框架简介一.MVC框架和MTV框架1.MVC 全名Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分.优势: 耦合性低 重用性高 生命 ...
 - FCC(ES6写法) Friendly Date Ranges
			
把常见的日期格式如:YYYY-MM-DD 转换成一种更易读的格式. 易读格式应该是用月份名称代替月份数字,用序数词代替数字来表示天 (1st 代替 1). 包含当前年份和相同月份的时候,makeFri ...