iOS调试之 crash log分析

上一篇小说写到人物剧中人物的创设,明日就详细总计人物角色怎么样融入参加景中。

一、crash log的获取

当您的app
在手机上crash的时候,会在表哥大上自动生成二个倾家荡产日志,也等于我们说的Crash
Log

CrashLog的职责放在:
iPhone设备的var/mobile/Library/Logs/CrashReporter

大家要取得的就是装备中的那几个CrashLog

依照人物剧中人物的光景剧本,是拔取产品来落到实处具体目的的2个或几个人物角色的简便叙述。通过三个轶事,来完结产品的统筹,传达产品的见识。

壹 、获取用户的 crash log

注意。那里的用户指的是您的app已经上架到AppStore上后的用户。

用作开发者,你想要获取到你的用户的崩溃日志的话就得经过 iTunes Connect
了。在 iTunes Connect 上的
Manage Your Applications -> View Details -> Crash Reports

那种措施有个前提,就是用户设备同意上传相关消息,打开了诊断与用量这几个选项设置->隐私->诊断与用量
(由于小编还未有app上架,所以这些办法作者未用过,so 就此打住。
希望有用过的大牛来拍砖只怕补充,Thx)

丨场景设置的含义

贰 、获取测试机的crash log

广大测试人士在测试途中,可能开发者在自测的中途,会遇到APP crash的情事。

相似的bug,1个及格的测试可以交给分明的复发步骤让开发者清晰地掌握bug原因;

也有广大bug,很多时候是偶现的,很只怕不能再一次复出出来,不能再次出现出来的bug是开发者头痛的,测试一般会给出bug的截图和复发步骤;

而相似crash是比较严重的标题了(所以相对不大概当什么都没发出过,不然会被打的233),那么些时候崩溃日志就越来越重大了,把崩溃日志send给开发人士,如此才能让开发者飞快稳定到错误的缘由和职责。

那么测试如何得到crash日志呢?

办法一:连接电脑,通过iTools高级选项来拿到崩溃日志(Mac版的找不到高级选项T.T,望赐教补充)

iOS崩溃日志分析_itools.png

措施二:连接电脑,去当地目录找

Mac : ~/Library/Logs/CrashReporter/MobileDevice/<DEVICE_NAME>

Windows : C://Users/<USERNAME>/AppDataRoamingApple/ComputerLogsCrashReporterMobileDevice/<DEVICE_NAME>/
其权且候你会发现一大堆的.crash文件和.ips文件

iOS崩溃日志分析_finder.png

方法三:通过Xcode获取到崩溃日志,方法是Xcode->Window->Devices

iOS崩溃日志分析_devices(1).png


首先场景与用例略有差异;

贰 、Crash Log的符号化

取拿到了.crash或然.ips文件的时候(憋纠结那多个公文有啥样差,改下后缀名就ok),用文件编辑器打开文件是一堆十六进制的内存地址,你会烦恼的意识压根看不懂。

log(脱敏后有点丑).png

Q:十六进制内存地址能够改成看得懂的么?

A:当然,将这么些十六进制地址转化成方法名称和行数的进度称之为Symbolication(符号化)。符号化很简短,只要你把你的.crash文件拉到上面提到过的Xcode的device
log里面,然后几分钟后就会符号化。可是此间有个前提,就是以此暴发crash的版本包必须是您本人的Xcode里面Archive出来的(这一个是苹果自带的法子,会自动检测是或不是包蕴极度的.dSYM文件和动用二进制文件)。

Q:那如若只要在新电脑上也想符号化咋做?

答案是,唯有相匹配的.dSYM文件和使用二进制文件就足以符号化。必需完全匹配才行。否则,日志将无法被统统符号化。

.dSYM文件地方在编的.xcarchive的包内容之中

上图是.dSYM文件的义务,应用的二进制文件就是打的包得.ipa后缀改成.zip,然后解压后其中有个.app文件就是采取的二进制文件。
将.dSYM文件与.app文件
和crash文件放多个目录下,然后再用deviceLog方法就足以符号化了。
其余还有其余符号化iOS
Crash文件的3种方法
有大牛已经结合得老大好了,给个链接,那里就不赘述了。
符号化将来是这么的~

水草绿的都是app的名字

那般看上去就翻番爽了\_

场景关怀的是从人物角色达成有个别目的的经过,不包涵系统功用;

三、Crash Log的分析

接下去就让我们对已经符号化未来的crash文件进行剖析。
网上已部分分类比较多,小编那边向来把自个儿目前相似找crash原因的模块显示出来,其他的就留待各位自个儿去研讨了,分别是装备和crash音信、相当信息、线程音信
一 、首先是装备和crash音讯

Incident Identifier: F3573A...E2F244A              //crash的id
CrashReporter Key:   cc2298...es77eeb              //crash的设备id
Hardware Model:      iPhone7,2                     //手机型号
Process:             [AppName] [1816]              //APP的名字[进程的id]
Path:                /private/.../Application...   //APP的位置
Identifier:          com....                       //bundle ID
Version:             14 (2.3.5)                    //版本号
Code Type:           ARM-64 (Native)               //app的应用架构之类不大清楚,^_^
Parent Process:      launchd [1]

Date/Time:           2015-10-26 15:03:29.29 +0800    //crash发生时间
Launch Time:         2015-10-26 14:58:28.28 +0800    //进入应用时间
OS Version:          iOS 9.1 (13B143)                //iOS版本
Report Version:      105

当你有大量的crash文件的时候,你就足以对crash文件里面的 Hardware
Model,Version , OS
Version等展开归类,就足以获知到众多音讯,比如说,你会通晓crash一般爆发原因是因为手机型号,依旧App版本,可能依旧手机版本的来由。(作者临时没碰过大量的crash文件,所以只好充饥画饼了\_

二 、其次是这一个新闻

Exception Type:  EXC_BAD_ACCESS (SIGABRT)                      //异常的类型
Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000000000118  //异常子类型
Triggered by Thread:  0                    //异常发生的线程(0为主线程,其他为子线程)

叁 、线程消息

Last Exception Backtrace:
0   CoreFoundation                  0x182780f48 __exceptionPreprocess + 124
1   libobjc.A.dylib                 0x197333f80 objc_exception_throw + 56
2   CoreFoundation                  0x182780e90 +[NSException raise:format:] + 120
3   [AppName]                           0x100c42a40 UmengSignalHandler + 144
4   libsystem_platform.dylib        0x197d6193c _sigtramp + 52
5   [AppName]                           0x1005d9f38 CScopePtr<IAVGAudioLogic>::operator IAVGAudioLogic*<IAVGAudioLogic>() (xprefc.h:165)
6   [AppName]                           0x1005d3b8c tencent::av::AVRoomMultiImpl::GetAudioLogic() (av_room_multi_impl.h:119)
7   [AppName]                           0x10057076c tencent::av::AVAudioCtrlImpl::SetAudioOutputMode(int) (av_audio_ctrl_impl.cpp:443)
8   [AppName]                           0x10044dc3c -[AVBasicManager changeSpeakerMode:] (AVManager.mm:525)
9   [AppName]                           0x100296e1c -[KTQAVRoom enableSpeakerMode:] (KTQAVRoom.m:345)
10  [AppName]                           0x1002970d0 -[KTQAVRoom settingSpeaker:] (KTQAVRoom.m:362)
11  [AppName]                           0x1003d5464 -[KTChatView onAudioNotificationReceived:] (KTChatView.m:685)

恩。。。那符号化以往应该能够看懂了啊,那个crash的标题应当是腾讯第②方的一个冲突吧233

诚如的话,通过分外新闻和线程消息就足以找到crash的原委了。

而用例则是通过用户采用进度中反映系统成效和行事。

填补部分那多少个类型消息

此处参考了很多音信,有过多的百般类型,有些没遇到过,那里就厚颜摘抄过来了(那里是原文地址:iOS
Crash文件的辨析
,再度多谢大牛们的阅历)

举例表达:

1、Exception Type

1)EXC_BAD_ACCESS

此类型的Excpetion是大家最长蒙受的Crash,日常用于访问了不改访问的内存导致。一般EXC_BAD_ACCESS前边的”()”还会蕴藏补充音信。

SIGSEGV:
平日由于重复释放对象造成,那种类型在切换了AKoleosC现在应该已经很少看到了。
SIGABCR-VT:
收到Abort信号退出,常常Foundation库中的容器为了维护情状平日会做一些检测,例如插入nil到数组中等会赶上此类错误。
SEGV:(Segmentation
Violation),代表无效内存地址,比如空指针,未起头化指针,栈溢出等;
SIGBUS:总线错误,与 SIGSEGV 差其余是,SIGSEGV 访问的是无济于事地址,而
SIGBUS 访问的是一蹴而就地址,但总线访问十二分(如地址对齐难点)
SIGILL:尝试推行不合法的指令,大概不被辨认大概没有权力

2)EXC_BAD_INSTRUCTION

此类非凡平时由于线程执行非法命令导致

3)EXC_ARITHMETIC

除零错误会抛出此类万分

Sara在浏览X网站的时候,发现了2个珍馐。于是分享给Linda,决定和Linda下午去消费。所以第一时间在网上买卖了打折券并改为这家公司的会员。此时他购入的事物已经第权且间同步到了手机端。早上和Linda到达店铺的时候,由于提前买卖了打折券所以不要排队第临时间就下单享受美味。

2、Exception Code

0xbaaaaaad 此种类型的log意味着该Crash
log并非三个真正的Crash,它仅仅只是包括了总种类统某目前时的周转状态。常常可以通过并且按Home键和音量键,只怕鉴于用户不小心触发
0xbad22222 当VOIP程序在后台太过频仍的激活时,系统只怕会停下此类程序
0x8badf00d 程序运维或许苏醒时间过长被watch dog终止
0xc00010ff
程序执行大批量消耗CPU和GPU的运算,导致设备过热,触发系统过热爱慕被系统终止
0xdead10cc 先后退到后台时还占有系统财富,如通信录被系统终止
0xdeadfa11 后边也关乎过,程序无响应用户强制关闭

那就是说从这几个情景的讲述里,大家可以关心到以下几点:

总结

最后计算一些或然会对各位有用的博文:
1、iOS应用崩溃日志分析(那最后有多少个板栗很有意思)
2、获取 iOS crash
log
(分析得很详细)
3、WWDC视频(2010年的WWDC视频)
4、官网文档——Analyzing iOS Application Crash
Reports

最末尾得PS下:小编用的是Xcode7.1+iOS9.1

1.对享受功效的培训是好友特邀的重点手段。

2.在选购了降价券将来,是或不是须求提示已经一起到了手机端?

3.提早买票可以防止排队的悲伤,那么产品是还是不是要求优化线下POS终端机的并行便捷性?

这就是情景所给予的意思,在切切实实处境的描述中窥见产品的题材因而不断优化。

丨从JOHNNIE WALKEQX56的广告看用户角色,用户场景

JOHNNIE
WALKETiggo是社会风气名牌的英格兰威士忌酒,有150多年的历史。它的7分钟的宣传片,于今还很经典。从那份广告方可知到用户角色及其场景存在的意思。

1.广告目的

促进品牌认知,增添销售量;

拉近用户与产品的关系;

让用户从产品中找到共鸣;

因而七个励志男的传说,为产品予以一种人文情怀。

2.人选剧中人物

1)Jason

老牌建筑设计师,但有当出品人的希望。有出色,有理想,有文采,敢打敢拼。

2)领袖男

团伙的主脑,有法老气派,仗义,果断,霸道老董的觉得。

3)胖子

协会的称心快意果,仗义,团队的调节剂,够男人。

4)爱车男

呈现和平的团伙成员,生活富裕,可是不骄不躁,温柔,仗义。

3.场景

有集团,咖啡店,高档餐厅,酒吧,拳击室,家里,篮球馆,电影公布会等景观。

4.传达的见地

友谊,理想,为了梦想敢打敢拼,互相协助共渡难关。

5.JOHNNIE WALKE奥迪Q7并发的时候

杰森被裁掉的时候:追求梦想的始发

杰森写不出去剧本的时候:相互慰藉

任意球成功的时候:互相庆祝

末段成功的时候:毛将安附皮之不存毛将焉附

8分钟的人物,场景,穿插产品的表现,很好的人文情怀融入产品,为产品予以人性化。各个人都会在从几个人物角色中找到自个儿内心深处渴望的人选原型,从而找到共鸣,拉近对成品的回味。那就是人物剧中人物及气象的意思,真正的去反映产品。

站在产品设计的角度,合理使用人物角色及形貌剧本,可以让产品传达的见解越发活跃,更促进我们在产品设计中找到着力的关键点,知足最Isuzu用户的急需,将成品的看法赋予人物角色中

以上~