面包屑(Breadcrumb)这个概念来自童话故事"汉赛尔和格莱特",当汉赛尔和格莱特穿过森林时,不小心迷路了,但是他们发现在沿途走过的地方都撒下了面包屑,让这些面包屑来帮助他们找到回家的路。所以,面包屑的作用是帮助开发者了解用户的行为路径,定位用户何时、为何发生崩溃。
在Testin崩溃分析服务中面包屑到底是什么?
新增面包屑功能,面包屑与日志信息类似,是开发人员自己定义的内容。通过插入面包屑来记录应用程序运行时的信息,如变量值,应用程序状态,代码进展,用户操作,程序性能,以及回调(如低存储器警告)等事件。本次Testin崩溃分析面包屑功能的SDK版本号为1.7.3(Android & iOS).
举个简单的例子,Android手机九宫格解锁功能相信大家一定再熟悉不过,常见的解锁手势有Z型、M型、W型,但有些用户为了防止密码过于简单,设置了很多千奇百怪的解锁图案,而经常又会忘记正确的操作步骤。同理也体现在我们日常开发App的过程中,通过崩溃分析SDK可以具体定位到哪行代码出现问题,但有些崩溃和异常出现的原因往往会经过复杂的方法调用关系,导致开发者面对Bug而无法修复。通过面包屑,开发者能够缩小定位问题的范围,从而更快地定位、解决问题。
当面包屑洒在森林中后
当面包屑洒在森林中后又会如何呢?某家大型手游企业在使用面包屑解决段违例崩溃问题时,总结出了以下几个关健的切入点:
函数调用栈:通过调用栈能分析绝大多数简单段违例崩溃的来龙去脉,运气好的话,看栈顶两三层就可以找到问题并加以修复,诸如空指针相关的绝对结果错误在完整的调用栈面前几乎无法藏身。
违例地址:利用违例地址并结合调用上下文,可以很简单的推断出来是空指针错误还是野指针错误。
应用临终操作:一般来说,对于野指针错误,函数调用栈和违例地址信息是基本没有参考价值的,它们只会告诉我们程序在哪里访问了哪个不该访问的地址,但是对于程序为什么要去访问,又怎么去访问就爱莫能助了。对于野指针段违例错误,我们需要知道最终用户是如何一步步靠近崩溃点的,一般来说本地调试可以使用trace log。
其他:机型,应用版本,内存,用户反馈等作为参考。
对于线上的崩溃,我们使用了testin崩溃分析,新版本(1.7.4)提供了一个非常给力的新功能:面包屑,这个功能可以用来收集100条自定义临终信息,可以很好的针对三号切入点
Testin崩溃分析中的面包屑到底能做什么?
添加面包屑,开发人员只需插入一个API调用(TestinAgent实例化后)。抓取的面包屑可以帮助开发人员:
1. 识别和分析会话事件、状态或参数来进行调试。
2. 利用这些信息,以及堆栈信息、诊断和用户搜索,确定问题根源。
3. 补充IDE调试,使他们能够捕获有关应用程序行为的有用信息,以便获得更多的用户。
4. 对于每个面包屑会话,SDK中自动存储的start痕迹标记用户会话的开始,每个面包屑会话最多有100条面包屑。
Testin崩溃分析的“面包屑”可帮助开发者分析Crash原因:用户做了什么操作、函数中变量是什么?不让任何一个Crash(崩溃)横行。