美文网首页iOS之报错上架填坑iOS之开发配置工具
使用Bugly收集并分析App的崩溃信息

使用Bugly收集并分析App的崩溃信息

作者: 翻炒吧蛋滚饭 | 来源:发表于2016-12-30 14:25 被阅读4379次

前言

先说下友盟的SDK,现在真是对友盟没脾气了,分享不正常!三方登录不正常!崩溃分析也不好用!最近所在项目的App,加了直播功能,总是会出现些不可预见的闪退出现,但通过友盟的崩溃统计分析,真心看的云里雾里的,很不方便,分析工具也不够友好,用起来很麻烦。一些朋友、同行都在用Bugly,鉴于Bugly是腾讯旗下的产品,在用过他们的JSPatch后,对腾讯的产品也是好感满满,这里就总结下Bugly的简单使用。
  然后说下符号表对于崩溃分析的重要性,因为虽然很多人在用Bugly,但可能没有用到符号表,导致很多问题没法定位到具体代码。所以,写这篇文章,一是帮自己记录下使用流程及终端命令;二是如果你没用过Bugly,可以帮助你快速上手;三是如果你在用Bugly,但没有使用符号表,可以让你把符号表用起来。但如果这些你都用过,这篇入门文章,就可以不用看了😀。

集成

集成很简单,按照官方文档来就好,我们这里建个简单的小项目,模拟一些崩溃,测试下Bugly的bug上报及时性。
  项目就取名叫BuglyDemo了,创建好项目后,去Bugly的控制台,添加我们的应用。


添加应用

  随便填一填就好了。然后我们点击异常上报,查看他的SDK集成方法,这里就不细说了。



  然后在AppDelegate中初始化,OK。
// 头文件
#import <Bugly/Bugly.h>

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

AppID可以点击你在控制台创建的App,然后点产品设置就能看到了。


Paste_Image.png

Bug上传测试

通过以上的集成及初始化,我们就可以使用了。现在我们创造一个闪退bug,测试下Bugly的bug上传及时性。
  来到ViewController中,在touchBegin中制造一个闪退。以数组越界为例:

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    NSArray *arr = @[@"", @""];
    arr[5];
}

运行项目(iOS10需要允许App进行数据访问),点击屏幕,这时就崩溃了,然后刷新Bugly的控制台,你会发现,bug已经统计到了。所以,Bugly的崩溃上传是在崩溃后立刻上传的,而友盟的bug上传,你需要反复启动几次应用,然后过几分钟才会在控制台看到。


Paste_Image.png

  我们点进异常问题中去看一下,崩溃信息大致是这样的,相较于友盟的分析,我们可以很直观的看到崩在哪个方法里了,但想更具体的分析代码位置,就要用到符号表了。


Paste_Image.png

符号表分析

没有符号表,我们就无法定位崩溃中的符号对应的代码所在的类以及类中的行数位置。我们在每次构建版本、debug的时候,都会生成dSYM后缀名的符号表文件,而我们App在手机上运行的时候,崩溃后产生的崩溃信息,不可能定位到代码的多少多少行,因为这些信息对于App运行是没有意义的,存储在App中势必会增大安装包的体积,所以App的崩溃信息都是存储为各种符号,具体符号代表什么,需要去符号表中查找对应的含义。
  我们每次debug、构建版本,都会生成dSYM文件,都对应了一个UUID(像我们的手机一样,都有一个唯一标志),按下图指示,我们就能找到我们所使用的App版本对应的dSYM文件的UUID,通过这个UUID,我们就能找到存储在我们电脑中的dSYM文件,将这个文件上传到bugly,bugly会自动帮我们找到崩溃符号的含义。


Paste_Image.png

  需要注意的是,构建版本会自动生成dSYM文件,但debug的时候,是没有的,需要我们手动开启。在build setting中搜索debug,将下面两项内容修改为正确的设置:


Paste_Image.png
  有了符号表的UUID,我们打开终端,按UUID找到符号表的路径。
mdfind "com_apple_xcode_dsym_uuids == A8E87810-70A7-3335-B638-C8B01BE15D79"

后面的一串字母数字组合,就是我们的UUID,这里需要将UUID按一定格式处理下,也就是在特定位置插入“-”,具体格式如下:


Paste_Image.png

  来到终端,运行上面的命令,就定位到了dSYM文件的位置:


Paste_Image.png
  打开文件路径,就找到了dSYM文件:
Paste_Image.png

  拷贝出来,压缩为zip文件,上传到bugly上。


Paste_Image.png
  刷新页面,再回去看刚才的问题,定位到了为ViewController.m的第24行:
Paste_Image.png
  SO,我们的24行做了越界的处理:
Paste_Image.png

其他体验

与友盟比较,Bugly更人性化一些,而且页面更好看写。对于闪退的出现,还提供了如何避免和修复该Bug的一些帮助:

Paste_Image.png
  Bugly也提供热修复功能,当然官方说自己的SDK也是基于JSPatch的,想了解热修复的,可以参考我的这篇文章:JSPatch热修复简单使用
  官网文档也提供了自动上传dSYM文件的操作流程,有兴趣的可以试试,避免以后每次新版本都要手动上传dSYM文件。dSYM文件也可以手动查找:
Paste_Image.png
  找到你构建的版本,右键show in finder:
Paste_Image.png
  然后在定位到的文件上右键显示包内容就OK了:
Paste_Image.png

总结

与友盟相比,Bugly在崩溃信息统计方面,优势很明显,除了上面的功能、细节强大,邮件提示、公众号提示,都体现了Bugly的用心。不说别的,就友盟那没事就抽风的服务器,我还是建议广大开发者快来拥抱鹅厂吧。

相关文章

  • 通过UncaughtExceptionHandler收集App的

    崩溃信息的收集   之前有写过Bugly的集成以及一些使用方法 使用Bugly收集并分析App的崩溃信息 ,当然任...

  • 广告,统计SDK集成文档

    一,统计相关: Bugly异常信息收集sdk 使用目的:收集APP崩溃信息 官网链接:https://bugly....

  • 使用Bugly收集并分析App的崩溃信息

    前言 先说下友盟的SDK,现在真是对友盟没脾气了,分享不正常!三方登录不正常!崩溃分析也不好用!最近所在项目的Ap...

  • Cordova崩溃日志收集-Android篇

    一、需求 收集移动端app闪退日志 支持离线收集 开始准备使用腾讯的bugly来统一收集崩溃日志,但是存在一下特殊...

  • Bugly的符号表工具使用总结-iOS

    首先先说下bugly的崩溃统计是实时的,即你的app前脚崩溃,bugly后脚就会给你统计到,但是在统计崩溃信息的时...

  • iOS 收集APP崩溃

    UncaughtExceptionHandler 业务场景描述 收集APP崩溃信息,上传到服务器,用于分析统计. ...

  • Bugly

    为了便于收集崩溃数据,为此开始接入Bugly!使用非常简单!登录https://bugly.qq.com/v2/w...

  • Android 全局捕获异常信息

    都遇到过APP使用崩溃的情况,尤其是在线上的崩溃,我们无法看到崩溃信息,此时就需要对崩溃信息进行收集。之前用的都是...

  • iOS获取App崩溃信息

    app上线后在某些情况下肯定会有崩溃现象发生获取崩溃信息的方式有很多,比较常见的是使用友盟统计、腾讯Bugly等....

  • Android应用停止运行处理策略

    整理来源:腾讯bugly,平时遇到的问题等,本文仅供个人查阅使用并做长期更新,不作其他用途。 1.崩溃分析策略 1...

网友评论

  • 3fdb581ec682:你好大神友盟统计怎么上传crash日志
    翻炒吧蛋滚饭:@南海一页扁舟 https://www.jianshu.com/p/8b5fb811dddb 可以参考下这个
    3fdb581ec682:@翻炒吧蛋滚饭 再问个问题就是我现在线上运行的app奔溃信息不是我自己手机出现的奔溃怎么拿到奔溃信息,在哪里获取呢谢谢
    翻炒吧蛋滚饭:@南海一页扁舟 这个我倒不知道,我用友盟都能在电脑本地分析错误的
  • zyc_在路上:大神,你好,想咨询你几个问题:: 1. bugly有没有过滤设备的功能?因为公司需要发布release版本,测试人员测试通过之后才上架,这样测试过程中出现的bug,也会上传到bugly上而导致bug率过高 2.bugly有没有检测网络状况和页面性能的功能哪?盼回复,谢谢
    翻炒吧蛋滚饭:@zyc_无悔 这个不是很清楚,得过一遍文档了
    zyc_在路上:@翻炒吧蛋滚饭 我明白你说的测试的时候把bugly给关掉,但是上架之前,测试就是要测release版本,这样关掉就不可能了,bugly上有没有配制过滤设备的地方?
    翻炒吧蛋滚饭:@zyc_无悔 不敢当不敢当,测试的话,只能在发布测试包的时候把bugly先去掉了,上线再加回来;性能的话,bugly的控制台显示有卡顿的追踪,不过我没用过,你可以去官网上看看这方面的文档
  • 英俊神武:大神您好,我觉得你用UUID,通过终端来找到对应的dSYM文件,这种方式很赞!
    但是你最后说的自动查找这种方法,这个不敢苟同,因为如果你发布版本之后,又编译了一次,这个对应的dSYM文件好像是会变的,到时候不就跟UUID对应不上了。
    翻炒吧蛋滚饭:@我是宋仲基 debug模式确实是每次都变的,如果debug模式勾选了不生成dSYM,或者一直在重新编译,友盟收集到的崩溃信息也是分布到不同的编译版本里的。但上线的版本,对应的dSYM是固定的,在收集这个版本的崩溃信息的时候,uuid对应的dSYM文件,都是你在上线时编译产生的dSYM。每次编译都有这次编译对应的dSYM,上线的那一版也一样,对应一个特定的dSYM。自动上传也可以设定在debug模式也上传dSYM,这样不管怎么编译,新生成的dSYM都可以上传上去。
    英俊神武:@翻炒吧蛋滚饭 是这样的,我之前用的是友盟统计,但是错误解析不出来,后来我问友盟的技术客服,他是这么说的:客户改动代码造成dsym文件变化,而把变化后的dsym文件来做对应,造成.csv和dysm的uuid不对应,请客户自己保存当前发布版本的代码和对应的dsym文件。
    即使代码没有变,只要重新编译uuid就会变
    翻炒吧蛋滚饭:@我是宋仲基 不是变了,而是为新编译的生成了新的dSYM,只要发布上线的版本的dSYM不删就行,bugly上收集到的崩溃信息给出的uuid找到dSYM也是我们上线的那一版对应的dSYM
  • 英俊神武:你说的,这里需要将UUID按一定格式处理下,具体什么格式呢,我怎么知道在哪里加-呢
    英俊神武:@翻炒吧蛋滚饭 嗯嗯,这个我试出来了
    翻炒吧蛋滚饭:@我是宋仲基 8位-4位-4位-4位-剩余的那些
  • 北暖37:楼主你好,我有个疑问,就是已经发布上线的应用,遇到崩溃,要怎么看到拿到这个dSYM文件上传到bugly,我不是很明白
    翻炒吧蛋滚饭:@北暖37 :fearful:所有的都看不到吗
    北暖37:@翻炒吧蛋滚饭 ,我通过你文章的根据构建版本获取dSYM文件,然后根据奔溃信息的构建版本把这个文件上传到了对应的符号文件,但是我没有找到文章中对应的奔溃的具体位置,,这个怎么解决啊???:sob:
    翻炒吧蛋滚饭:@北暖37 发布上线的dsym也是能通过控制台在本地找到的( ˙˘˙ )
  • 苜蓿鬼仙::joy: :joy: :joy: 需要注明的是,在配置符号表的时候,每次编译的话,UUID 都会发生改变;不然的话就很容易形成UUID不匹配,然后发现上传时 配置好的 .zip 文件根本上传不上去
    04ef6057ba47:@苜蓿鬼仙 我也是什么都不打印请问你怎么解决的
    翻炒吧蛋滚饭:恩,上线的版本的dsym倒是固定不变了
    苜蓿鬼仙:而且重新编译了之后,mdfind "com_apple_xcode_dsym_uuids == A8E87810-70A7-3335-B638-C8B01BE15D79" 这句命令后面就不会打印出 路径了
  • 苜蓿鬼仙:iOS10需要允许App进行数据访问 请问这个怎么设置呀,为何我在隐私数据中没有找到呀
    翻炒吧蛋滚饭:@苜蓿鬼仙 https://zm10.sm-tc.cn/?src=l4uLj8XQ0IiIiNGVlp6RjJeK0ZyQktCP0M3HmsfGzsaezZyemg%3D%3D&uid=215076cceb09a996bd2525e84b997df8&hid=3faafa324e39479e8d35dee452c159b5&pos=1&cid=9&time=1489914913160&from=click&restype=1&pagetype=0000000002000402&bu=web&query=iOS10+%E6%95%B0%E6%8D%AE%E8%AE%BF%E9%97%AE&mode=&v=1&uc_param_str=dnntnwvepffrgibijbprsvdsei 看看这个
  • 苜蓿鬼仙:如果 bugly 的SDK集成了 JSPatch 的话,现在 JSPatch 已经被禁用了,这个还能用吗?
    翻炒吧蛋滚饭:我们集成的是不带热修复功能的,官方的建议也是暂时把热修复功能下掉,我们前几天新提交的版本,去除了JSPatch,审核通过了
  • 童话镇里蜿蜒的河:楼主你好 我按照官方文档 设置好了bugly。 但是测试的时候 我不能捕获到任何崩溃错误信息。 是怎么回事? 是我哪里设置的不对么?
    翻炒吧蛋滚饭:@童话镇里蜿蜒的河 :grin:跟你也学到了,多谢
    童话镇里蜿蜒的河:@翻炒吧蛋滚饭 发现点小规律,好像连着Xode就收集不到bug。必须把线拽掉,单独用真机跑才行。 不管怎样,还是谢谢指点
    翻炒吧蛋滚饭:官方说是在debug的时候有流量保护,你删除应用,重新安装一个,就好了
  • 童话镇里蜿蜒的河:楼主你好 我按照官方文档 设置好了bugly。 但是测试的时候 我不能捕获到任何崩溃错误信息。 是怎么回事? 是我哪里设置的不对么?
    求解
    翻炒吧蛋滚饭:@童话镇里蜿蜒的河 没写,就在appDelegate里初始化了一下
    童话镇里蜿蜒的河:@翻炒吧蛋滚饭 /**
    * 发生异常时回调
    *
    * @param exception 异常信息
    *
    * @Return 返回需上报记录,随异常上报一起上报
    */
    - (NSString * BLY_NULLABLE)attachmentForException:(NSException * BLY_NULLABLE)exception;
    你有写这些代码么? 是干嘛用的
    翻炒吧蛋滚饭:删除应用、再安装试试,bugly有个流量保护机制,开发环境下用一段时间就不会去上传崩溃了,得删除再重装应用

本文标题:使用Bugly收集并分析App的崩溃信息

本文链接:https://www.haomeiwen.com/subject/jakmvttx.html