码迷,mamicode.com
首页 > 移动开发 > 详细

Android jni Crash堆栈信息分析

时间:2016-06-27 22:56:50      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:

如何定位Android NDK开发中遇到的错误

    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堆栈信息分析

标签:

原文地址:http://www.cnblogs.com/swarmbees/p/5621605.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!