大家是怎么防止或预防,跟踪IOS 闪退的出现?

Sungrone 发布于 2013年10月29日
无人欣赏。

最近我的应用遇到十分纳闷的事情,就是在测试机上测试好好的,放上架使用后人们总出现不同程度的错误导致闪退(是根据友盟的日志),目前我的应用大部分都是由于数组越界导致问题的(但测试就没有遇到过)。想问问大牛们是怎样控制和跟踪已上架项目的情况?毕竟友盟的仅显示了错误信息,没有来源不好跟踪。

共21条回复
Lithium 回复于 2013年10月29日

除了空指针,越界什么的异常都可以catch的=。= 不过官方不鼓励try catch,不过=。= 管他呢。。。

tangyumeng 回复于 2013年10月29日

crashlytics ,你可以试试。 数组越界其实你可以用一个category 重写数组的objectAtIndex 。如果越界返回nil 。总比崩溃对用户友好一些。我是这样做的。。

yangjie6020 回复于 2013年10月29日

2楼 @tangyumeng 好建议 为嘛我的crashlytics一直在排队呢。。。。。

abigfrog 回复于 2013年10月29日

做好边界测试

tangyumeng 回复于 2013年10月29日

3楼 @yangjie6020 我是之前测试用过,实际项目中没有用到。。。好像显得我对公司项目不上心的样子 😢

Sungrone 回复于 2013年10月29日

1楼 @Lithium 我也是由于官方不建议,所以没有用JAVA式的方法来做这个

Sungrone 回复于 2013年10月29日

3楼 @yangjie6020 crashlytics 是要排队的?

4楼 @abigfrog 这个感觉是网络问题导致的

terryso 回复于 2013年10月29日

1楼 @Lithium 用catch的话,程序会在不正常状态,接下来会出现什么问题都是不可预知的,还不如让APP直接crash。 要完全避免crash基本上很难,只能尽最大能力预防或提早发现,我们现在的做法是: 1 使用crashlytics,跟踪线上用户crash时的详细信息。crashlytics的信息比友盟的详细很多,很多时候可以详细到代码行。并且可以添加自己的日志,这些日志会在crash报告中包含。 2 代码中使用NSAssert之类的防御性编程,让Debug版的APP在数据不符合预期时,抛出异常。 3 每次发布前都用xcode的静态分析工具,分析源代码。 4 尽可能的消灭编译警告。 5 在模拟器时测试时,要时不时运用一下模拟器的内存警告功能,这样会经常会碰到一些不是你预期的问题。 6 测试机最好是低端一点的机器,容易出问题。

appleseedez 回复于 2013年10月29日

这个要分析原因吧。 导致闪退的原因:1. 程序逻辑 2. 边界条件 3. 内存用量。 前面两个原因目前都是通过单元测试来保证。 内存这块需要测试时留心。 (如果lz熟悉instrument 会有帮助)

Lithium 回复于 2013年10月29日

8楼 @terryso 当然catch以后还是会做一些清理工作,这类清理工作其实和事前做的也类似。请教下,越界的exception,catch以后返回nil,会有什么问题么?

之前也稍微考虑了一下成本和代价,觉得还是catch要好得多。

Sungrone 回复于 2013年10月29日

9楼 @appleseedez instrument也用过一阵子,但由于太慢之后就没有再使用了。。目前看来还要有必須重构后再用这个来做预测

terryso 回复于 2013年10月29日

10楼 @Lithium 只是读取数据的这种catch应该没有什么问题,但如果涉及到内存的修改就应该会有问题了。

terryso 回复于 2013年10月29日

10楼 @Lithium 官方不鼓励try catch应该就是怕你在try里做了内存修改的操作,然后出错之后,你catch掉了,这是就会有未知的问题了。

terryso 回复于 2013年10月29日

11楼 @Sungrone instrument我也经常用,怎么不觉得慢呢?

Sungrone 回复于 2013年10月29日

14楼 @terryso 使用真机的时候,启动慢很多 T_T

zhangmeteor 回复于 2013年10月29日

2楼 @tangyumeng 好建议。。受用了。。

Sungrone 回复于 2013年10月29日

2楼 @tangyumeng 看到这个之后有新的感觉,就决定这样做吧~!

freecunix 回复于 2013年10月29日

我的经验就是:心中有断点。。程序架构好的话,一看到闪退大概就知道是哪个模块代码的问题了。结合提示,在定位就容易了。因为一定是某个事件导致闪退,程序总不会什么都不执行就自己退了吧。。。

terrysunhh 回复于 2013年10月29日

每两天重启手机一次

Sungrone 回复于 2013年10月29日

18楼 @freecunix 额,这个感觉是人件(软件)合一啊。。。。

morpheus1984 回复于 2013年10月29日

18楼 @freecunix 心中有码,天下无码的境界。

本帖有21个回复,因为您没有注册或者登录本站,所以,只能看到本帖的10条回复。如果想看到全部回复,请注册或者登录本站。

登录 或者 注册
[顶 楼]
|
|
[底 楼]
|
|
[首 页]