iOS crash Log 的获取和分析

3,114 阅读3分钟

准备工作

桌面新建 Crash 文件夹

crash Log 的获取

如果是开发模式,直接在真机上就能获取。

Xcode -> Window -> Devices and Simulators -> Devices -> ‘你的真机’ -> View Device Logs

然后可以在其中可以看见所有该手机的相关 log ,其中就有所有应用的 Crash Log 找到对应应用的 Log ,在右边可以查看详情。

红框圈起来的即为应用 Crash 的位置。

如果是已经发布的应用

建设中...

但是如果应用不是本机打包的话,是看不到这些内容的,这个窗口里显示的是一大堆内存地址,如下

上图是支付宝的一次 Crash Log ,我们不是他的开发者,无法分析这个日志,此时就需要相应的 dSYM 文件。

我们先将内容复制出来到一个 .txt 文件,然后将后缀名改为 .crash,然后将文件放到桌面的 Crash 文件夹中。

dSYM 文件的获取

当我们使用Xcode打包时,应用中的文件名、方法名、行号等信息与可执行文件的地址是对应的,有了这个文件,我们就能将看不懂的内存地址还原成项目中的文件、方法信息,从而定位到 Crash 产生的原因。这个文件的位置如图所示:

show in finder
显示包内容

复制该文件到桌面 Crash 文件夹中。一般来讲为了更好的分析Crash,每次发布版本后都应该备份该文件。

此处需要注意,选择的 Crash Log 和 dSYM 文件需要是同一次构建生成的才行,不然是无法匹配的。比如你可能在不同的构建版本中修改了方法名或者加入了新的代码,行号也会发生变化,生成的 dSYM 文件也会不一样。

校验方法

建设中...

symbolicatecrash 的获取

symbolicatecrash 是 Xcode 自带的一个工具,当应用就是本机打包的生成时候,它会自己调用这个工具进行分析,就是上面我们看见的已经分析好的结果。现在呢,我们需要由指定 dSYM 文件来分析指定的 Crash Log。

symbolicatecrash 所在的路径如下:(我的环境是 Xcode11.3 ,要是你找不到就问百度吧)

/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash

在 Finder 中使用快捷键 Command + Shift + G 快速查找到它。

复制该文件到桌面的 Crash 文件夹中。

分析

现在你的文件夹应该是下图这样的:

1.打开终端执行命令,进入 Crash 文件夹

cd /crash文件的目录

2.使用命令开始分析,*是你文件的名称

./symbolicatecrash ./*.crash ./*.app.dSYM > symbol.crash

如果你足够不幸运的话你会发现报错了,如下:

Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69.

这是因为没有配置环境变量,输入下面的命令:

export DEVELOPER_DIR="/Applications/XCode.app/Contents/Developer"

然后再次执行行步骤2,稍等片刻,文件夹中就会出现分析好的文件symbol.crash

你可以直接以文本编辑的方式打开:

也可以双击打开,在弹框中选择对应的应用,不知道是不是因为本机就是打包的电脑(有知道的小伙伴可以告诉我),它十分智能的跳转到了 crash 的位置,如图:

你可以看到 Crash 的方法和在记事本中看见的是同一个[QRMyCodeVC lcTestClick:]

后记

萌新一个,有什么错误或者对本文有任何意见和建议可以友善评论啊,看见都会回复的,喜欢的可以点个赞哈!

谢谢您!