crash分析记录

目录

由一个问题说起:

1、通过设备直接获取崩溃日志

2、使用Xcode从设备获取崩溃日志

3、dSYM符号集

4、利用dSYM解析符号集



由一个问题说起:

在开发阶段,在使用ucardebug的过程中突然闪退,因为这个时候我的手机是没有处于调试中的,所以xcode不会把奔溃堆栈打出来,但这个奔溃确实是出现了,怎么处理?

经过研究,发现此时获取到奔溃信息的途径有这么2种:

1、通过设备直接获取崩溃日志

1)打开设置->隐私->分析->分析数据,在其中找到你想要的应用程序的日志,日志将使用以下格式命名:<应用名称> _ <崩溃时间> _ <设备名>

2)选择所需的日志,复制文本或点击右上角的分享按钮分享出去,并且把分享得到的.ips.synced或者复制文本而来的.txt文件的后缀名改为.crash,因为Xcode不接受没有.crash扩展名的崩溃日志。

2、使用Xcode从设备获取崩溃日志

把手机连接到Mac,并选择Xcode->Windows->Device and Simulator,然后点击View Device Logs,你会看到手机上会有好多Log,其中Type为Crash的就是崩溃的Log,如下图:

 

这个时候,我们就可以获取到奔溃信息了,但是这个时候都是一些16进行地址信息,根本没法看,所以,我们需要找到对应的符号文件对其进行解析。

3dSYM符号集

dsym符号表的工作原理是什么?为什么通过它就可以转换为我们的源代码?请看这篇文章:

  1. iOS dSYM文件结构剖析(上)
  2. iOS symbolicatecrash工具crash日志分析
  3. iOS dSYM文件结构剖析(下)

看似还是比较简单的,但我发现在我们APP所在的位置并没有对应的dsym符号表被生成,为什么?符号表你在哪里(哭脸)?后来发现,因为我们的工程使用的是cocopod进行三方库的管理,所以为了优化编译速度,在buildSetting中在debug环境中使用了”DWARF”而非”DWARF with dsym File“。为什么这么做?我想这篇文章或许能给你答案:https://zhuanlan.zhihu.com/p/112764192

好了,当我用Debug2Test去编译我的项目工程,dsym文件出现了。下面就是取解析我们的Crash文件。

4、利用dSYM解析符号集

准备好了一下文件,就可以对其进行解析了,具体文件如下:

  1. *.app文件
  2. *.dSYM文件
  3. *.ips文件
  4. CrashAnalyticScript.sh脚本文件

我们将这几个文件放到同一个文件夹下,然后执行脚本。实际解析是不需要*.app文件的,但我们需要确认app的UUID和dSYM的UUID是否一致,所以这里用它来验证一下。解析脚本下载地址:https://github.com/UCliwenbin/IOS-CrashAnalysis

先看下解析之前的crash的样子,这个已经是被控制台解析过的一部分:

可以看到,我们自己APP里还是16进制地址。再来看下解析后的效果:

可以看到函数的调用栈符号全被解析出来了,而且包括了符号所在的文件,行号等信息。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值