iOS项目崩溃日志采集与分析

摘要:
事实证明,数组中插入了一盒nil元素,导致了崩溃。此时,您会想,nil对象插入在哪里???看看Bugly的坠机信息:2016年11月2日下午的屏幕截图10.56.42.png 2016年11日2日下午,屏幕截图10.56.55.png。Bugly可以帮助我们对碰撞数据进行一些统计和分析。在我们的日常工作中,阅读崩溃日志使我们程序员不得不每天工作。怎么方便?优梦的用法与此类似。如果你感兴趣,你可以自己试试。

一、日常开发崩溃分析

先看一个下Demo代码:

    NSString *str = nil;
    NSArray *arr = @[@"hello",str];

代码很简单,因为数组里面有nil元素,所以运行的时候一定会崩溃,运行的崩溃画面分析:

先看一个OC的DDemo工程:

    NSString *str = nil;
    NSArray *arr = @[@"hello",str];

代码很简单,因为数组里面有nil元素,所以运行的时候一定会崩溃,运行的崩溃画面分析:

iOS项目崩溃日志采集与分析第1张
屏幕快照 2016-11-02 下午9.52.17.png

如图所示,在我们工作中,在打了全局断点的情况下,在一些情况下,还是不能崩溃在指定的问题代码位置,而在main函数的入口处,我们有时候就会很茫然,不知所谓,这时候,我们就要一步一步来分析,问题道理在哪里,首先肯定会先看崩溃原因:
attempt to insert nil object from objects[1]
我们就知道,奥。。。原来是数组里面插入了一盒nil 的元素,导致崩溃的,这时候,就会去想,是哪里呢,哪里插入nil对象了呢???
这很明显,不是一个正确的解决问题的思路,在看完原因后,我们应该,看一下线程下调用堆栈的信息,堆栈信息我们应该从下往上看(看图中的箭头方向),一行一行的看,可以看到我们熟悉的方法,我们最终可以得到以下信息:
在控制器viewController加载ViewDidLoad方法的中,初始化一个数组,由于尝试插入一个nil元素,引起了崩溃。所以是不是很直观的就知道了问题的具体信息了

二、上线应用崩溃采集

那么,问题来了,在我们开发的环境中,我们可以通过看调用堆栈的信息,和崩溃信息来确定问题所在,那么当我们的App上线后,不可计的用户可以能由于各种环境和操作,发生崩溃,我们怎么知道问题在哪里,怎么优化呢,
这时候,我想说,我刚学编程的时候,老师常说的一句话:凡是刚需的、经常用的,但是又比较复杂的,都有大牛们做好的解决方案,不需要我们这种菜菜来考虑怎么解决 ,事实证明这句话是有道理的,现在有许多第三方提供了现成的解决方法,例如友盟、Bugly等,使用起来都很简单方便,我就介绍下Bugly的使用方法:

  • 登录Bugly,注册应用:
iOS项目崩溃日志采集与分析第2张
屏幕快照 2016-11-02 下午10.36.03.png
  • 选择异常上报

    iOS项目崩溃日志采集与分析第3张
    屏幕快照 2016-11-02 下午10.36.55.png
  • 可以选着SDK集成,也可以使用Pod,我当然选着Pod了,这么方便:
    通过CocoaPods集成,在工程的Podfile
    里面添加以下代码:
    pod 'Bugly'
    初始化Bugly,在工程AppDelegate.m
    的application:didFinishLaunchingWithOptions:
    方法中初始化Bugly:
    Objective-C

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [Bugly startWithAppId:@"此处替换为你的AppId"];
     return YES;
  }

Swift

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
      Bugly.startWithAppId("此处替换为你的AppId")
      return true
}

友情提醒:使用Bugly采集崩溃信息,要使用真机,不能使用模拟器,不可以Xcode启动真机App,因为,崩溃后,程序会停止在mian函数,那么上传崩溃信息就走运行不了了。

看看,Bugly的崩溃信息:

iOS项目崩溃日志采集与分析第4张
屏幕快照 2016-11-02 下午10.56.42.png
iOS项目崩溃日志采集与分析第5张
屏幕快照 2016-11-02 下午10.56.55.png
iOS项目崩溃日志采集与分析第6张
屏幕快照 2016-11-02 下午10.57.11.png

可以看到,Bugly可以帮助我们做一些崩溃数据的统计与分析。

iOS项目崩溃日志采集与分析第7张
屏幕快照 2016-11-02 下午10.57.28.png

当我们进入崩溃的详情页面,可以清楚的看到在哪一个控制器,哪一个方法,什么原因引起的崩溃。

在日常工作中,看崩溃日志,使我们程序员每天必需要做工作,怎样是不是很方便啊,友盟的使用和这个很类似,打击有兴趣可以自己尝试哦。

转自:http://www.jianshu.com/p/76804c6c2e16

免责声明:文章转载自《iOS项目崩溃日志采集与分析》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Picasso、Glide及Fresco对比iOS tableview上部白条在不同系统上的处理,下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

IDEA中设置自动build-改动代码,不用重启工程,刷新页面即可

1.CTRL + SHIFT + A --> 查找Registry --> 找到并勾选compiler.automake.allow.when.app.running   2. FILE - SETTING - Build - Compiler - bulid project automatically  勾选上即可。...

[转]ODAC 应用技巧 (一)使用 ODAC 的 Net 方式

原文地址:ODAC 应用技巧 (一)使用 ODAC 的 Net 方式 使用 ODAC 的 Net 方式 nxyc_twz@163.com 大多数应用程序使用 OCI 的ODAC 标准方式来连接 Oracle 数据库服务器。这是使用第三方开发语言设计 Oracle 应用程序最常用的方法。 所有的 OCI 接口都作为内部库来使用,使得编译生成的应用程序非常小...

微信浏览器input常见问题

微信中 input 引起的一些常见问题 一、ios端兼容input光标高度 input输入框光标,在安卓手机上显示没有问题,但是在苹果手机上 当点击输入的时候,光标的高度和父盒子的高度一样。 原因: 通常我们习惯用height属性设置行间的高度和line-height属性设置行间的距离(行高),当点击输入的时候,光标的高度就自动和父盒子的高度一样了。(谷歌...

为什么建议使用 Linux?从“白嫖”到精通,只需要这几步!

Windows系统,大家肯定不陌生!但我每次,打开Windows 系统的电脑,跳出的弹窗真是令人窒息,想关都关不完。 下载应用软件时,甚至还绑定了各种——多个应用软件打包下载。这时的我,脑子里只有“无语”二字。 而Linux 就很好地解决了这个问题,什么毒霸、管家,通通都不需要。那Linux 到底怎么样呢?我们一起来一探究竟! 01 Linux 是什么?...

(转载)Ubuntu 下常用的软件工具

(转载)http://blog.chinaunix.net/uid-25885064-id-3474459.html 1.编程工具: Eclipse ,Intellij IDEA, Codelite,Apatana Studio,Zend Studio,NetBean IDE, Gambas22.浏览器: firefox browser,chromium...

大家是怎么做APP接口的版本控制的?欢迎进来看看我的方案。升级版的Versioning

背景 APP不同于网站,网站程序一发版,所有用户看到的都是最新的页面、调用最新的接口,没有新老版本一说。APP一旦下载到用户手机上,用户不更新你拿他一点办法都没有,但是随着业务的调整,同一个接口的请求参数和输出JSON有变化的话,就需要考虑老版本的兼容问题了。 举个例子:某APP的1.0.0版,服务端用户信息接口(api/User/UserInfo)输出的...