iOS开发之Crash分析,以及收集
一 先谈谈iOS的Crash收集方式:
1. APP 发生crash,用户手机手机上肯定会有crash纪录,当然删除了该app,或是删了再装 crash纪录还是没了。
2. 如果用户设置-隐私 同意的话,你的crash日志会发送到App store,你可以去账号上去查看crash日志 。(PS:但是,这个要用户自己同意,大部分人选的是不同意,我也选的不同意。可能你的账号上根本没有任何crash纪录,这不代表你的app 没有crash过。)
3.第三方日志统计平台,国外的比如Crashlytics,Hockeyapp,国内的也有 友盟,Bugly 等等。
4.当然也可以自己收集,开源项目很多,如 KSCrash,plcrashreporter,CrashKit 等。(PS:小公司的话,用用第三方的省心点。但是对安全性高的,并且有人力有时间情况下,还是自己实现收集吧,阿里 京东 这些公司肯定不会用 3.xxx ,都是有自己的收集服务。腾讯肯定用自家的Bugly )
现在聊聊选用方式:
1.大公司的话,老老实实 自己 实现收集。
2.中小公司的话如果是金融类或是涉及个人资料比较多的,并且用户量特别巨大的,建议 也是老老实实自己收集。
3.如果你说我是金融类的,目前/以后 用户不一定多,自己也没时间 人力搞,那你就用国外的第三方。(PS:个人见解是,你的那点数据对于国外的平台,人家不是很care,相对安全点。但是,用国内的第三方的话,不是说国内做的不好,而是更容易暴露 你的app 什么什么问题。)
4.中小公司涉及用户安全不是很多的app,以及游戏,可以考虑使用第三方 , 友盟 或是 Bugly 。
二 选择友盟好还是Bugly好?
1.友盟很早就出了,数据统计,推送,crash统计,分享,IM 等 服务很多,也很全。小公司也用的多。(我之前有2个项目都用了友盟 )
2.Bugly ,看着骚气的名字还以为是国外的第三方,其实是大企鹅出的,我记得刚出来时间不是很长,但是 腾讯出品,必属精品 !腾讯产品,值得信耐! 打2句骚气的广告,因为最近要去腾讯面试,先奶一口。(ps:有一个项目用了Bugly!腾讯的信鸽推送我感觉比 极光 这些好多了。当年有对几个平台测试分析,遗憾的是 没有纪录下来!)
我个人推荐使用Bugly,腾讯自己的产品也都在用,Bugly定期也有分享文章,都是干货,大家可以去搜搜。
三 谈谈我之前处理一个crash 的经验,仅做参考
去年某天,人事跟我讲他在 app store 下载的 我们自己的app crash了。我当时就想,老子写的app 竟然会crash?竟然会crash?
1. 我然后问了,哪个界面什么操作导致的?可以复现吗? 得到的结果是,在就诊人列表,然后在点击 添加 就诊人按钮的时候 GG的。另外,不是必现的。
2. 我首先跑去 appstore 看下日志统计,对 一个 纪录都没。(这就是要自己实现或是借助第三方的原因。)
3. 让测试 用不同机型 跟测。(测试复现率,然而n轮没有再次crash,为什么让测试继续测,主要是统计下复现率,另外测试的时候多点击下其他界面,有可能是其他页面有内存泄漏,刚好在这个界面时候出了问题,估测下受潜在影响的用户)
4. 我拿了那crash 的机子 ,导出了crash日志到 xcode ,点开日志 并没有直观的显示哪个地方crash。
5. 我看了下版本,crash 的 是 上个 小版本,目前线上的 这一块 都有 重写过,(git还原到上个版本)检测下代码也没啥问题。
然后只能通过crash和 .app 分析:
1. 建议 桌面 建 个文件夹 appxx ,然后 将那个闪退 对应的 包 xxx.app 放入 appxx文件夹
2. 打开终端cd命令,进入该文件夹
3.在命令行输入“dwarfdump --uuid XXX.app/XXX”
4.在终端中输入以下命令“atos -o XXX.app/XXX -arch arm64 0x00000001006544f8 ”
“0x00000001006544f8” 这个地址是
查看日志搜索“Triggered by Thread”:得到“Triggered by Thread: 0”,我们知道是0号线程闪退,找到0号线程得到如下:
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x00000001833114bc mach_msg_trap + 8
1 libsystem_kernel.dylib 0x0000000183311338 mach_msg + 72
2 CoreFoundation 0x0000000183740ac0 __CFRunLoopServiceMachPort + 196
3 CoreFoundation 0x000000018373e7c4 __CFRunLoopRun + 1032
4 CoreFoundation 0x000000018366d680 CFRunLoopRunSpecific + 384
5 GraphicsServices 0x0000000184b7c088 GSEventRunModal + 180
6 UIKit 0x00000001884e4d90 UIApplicationMain + 204
7 XXX 0x00000001006544f8 0x10009c000 + 5997816
8 libdyld.dylib 0x000000018320e8b8 start + 4
XXX:就是你的XXX.app的名称,找到他的第一个地址,这个地址就是要输入的地址,如果存在多个地址,那么直接在后面追加。
最后显示,是因为友盟统计 的时候 报了错,第一时间跟友盟技术客服沟通,然后他们有记录下,承诺下个版本改进。然后我有查询了一下,使用友盟确实有极小极小的奔溃率,我们app也不是第一个。当然在可接受范围内。以上的crash分析 只是当时那个阶段的解决方式,当然也有更合适的定位方案。
最后结论: 第三方也不要用太多,能自己实现的还是自己实现。
iOS开发之Crash分析,以及收集的更多相关文章
- 李洪强iOS开发之iOS社区收集
李洪强iOS开发之iOS社区收集 项目 简述 github 全球最大的代码仓库,无论是iOS开发还是Android开发没有人不知道这个网站,它也是一个社区,你可以去follow(关注)某些人或公司. ...
- 李洪强iOS开发之iOS工具收集
李洪强iOS开发之iOS工具收集 项目 简述 日期 我是怎么慢慢变懒的 : Jenkins + 蒲公英 使用Jenkins + 蒲公英使得项目打包给测试人员自动化,大大节省了劳动力 2015.04.1 ...
- 李洪强iOS开发之iOS学习方法收集
李洪强iOS开发之iOS学习方法收集 在这里收集一些iOS学习方法,会不断更新 项目 简述 日期 一年多iOS开发总结 作者总结了自己一年多的iOS学习经验,对于iOS初学者来说很多地方是可以借鉴的 ...
- 李洪强iOS开发之iOS好文章收集
李洪强iOS开发之iOS好文章收集 该文收集朋友们转发或自己的写的技术文章,如果你也有相关的好文章,欢迎留言,当好文章多的时候,我会对这些好文章进行分门别类 文章 简述 日期 直播服务配置 使用 ng ...
- 李洪强IOS开发之iOS好项目收集
李洪强IOS开发之iOS好项目收集 在这里收集一些最近出现的比较实用好玩的框架或者项目,会不断更新 项目 简述 日期 SCTableViewCell 类似与QQ侧滑删除Cell的Demo 201501 ...
- iOS开发之Xcode常用调试技巧总结
转载自:iOS开发之Xcode常用调试技巧总结 最近在面试,面试过程中问到了一些Xcode常用的调试技巧问题.平常开发过程中用的还挺顺手的,但你要突然让我说,确实一脸懵逼.Debug的技巧很多,比如最 ...
- iOS开发之Socket通信实战--Request请求数据包编码模块
实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...
- iOS开发之UISearchBar初探
iOS开发之UISearchBar初探 UISearchBar也是iOS开发常用控件之一,点进去看看里面的属性barStyle.text.placeholder等等.但是这些属性显然不足矣满足我们的开 ...
- iOS开发之UIImage等比缩放
iOS开发之UIImage等比缩放 评论功能真不错 评论开通后,果然有很多人吐槽.谢谢大家的支持和关爱,如果有做的不到的地方,还请海涵.毕竟我一个人的力量是有限的,我会尽自己最大的努力大家准备一些干货 ...
随机推荐
- Makefile学习(三)执行make
9 执行make 一般方法:make. 某些情况:1.可能需要使用make更新一部分过时文件而不是全部 2.需要使用另外的编译器或者重新定义编译选项 3.只需要查看哪些文件被修改,不需要重新编译 所以 ...
- [Angular 2] Injecting a Service
Using Services in Angular 2 is very simple. This lesson covers how to create a simple class as a Ser ...
- Android AdapterView View的复用机制 分析
对于ListView.GridView相信大家都不陌生,重写个BaseView,实现对于的几个方法,然后就完毕了我们的界面展示.而且在大部分情况下,我们载入特别多的Item也不会发生OOM,大家也都明 ...
- 2.4 Git 基础 - 撤消操作
2.4 Git 基础 - 撤消操作 撤消操作 任何时候,你都有可能需要撤消刚才所做的某些操作.接下来,我们会介绍一些基本的撤消操作相关的命令.请注意,有些撤销操作是不可逆的,所以请务必谨慎小心,一旦失 ...
- RMAN-configure命令
在Oracle 10g中的配置情况 使用RMAN>show all; 可以显示出RMAN 配置参数为: CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # ...
- 卸载rpm包提示:error: specifies multiple packages
–allmatches Remove all versions of the package which match PACKAGE_NAME. Normally an error is issue ...
- windows服务器性能监控工具、方法及关键指标
原文:http://www.cnblogs.com/liulun/p/3543777.html 监控方法 推荐使用windows自带的“性能监视器”(老版本的windows叫性能计数器)来监控服务器的 ...
- html与css的移动端与pc端需要注意的事项
一个移动端与pc端之间最主要的也就是尺寸问题,苹果与安卓的机型尺寸大小相差甚多,一个尺寸都会影响用户的体验.那么我们来了解一下一些常用的解决方法. 一般在网页中都会在头部有一些这样的代码 <me ...
- Js得到radiobuttonlist选中值,设置默认值
JS 代码 var vRbtid=document.getElementById("rbtid"); //得到所有radio var vRbtidList= v ...
- 如何debug android cts
启动和关闭ADB服务(adb start-server和adbkill-server) 经作者测试,模拟器在运行一段时间后,adb服务有可能(在Windows进程中可以找到这个服务,该服务用来为模拟器 ...