图形化分析crash日志

崩溃的日志的获取 是调试程序过程中一个重要的环节.每个程序都会有bug,但是你多久能拿到崩溃日志,多久能够通过这些日志分析出问题所在 ,并解决,怎么样规避一些比较低级的bug.这是我们经常碰到的问题.今天就来分享一下自己在调试过程的崩溃信息的追踪方式.

今天主要有一下几点:

1.crash 文件的采集的具体步骤.

2.crash文件中的内容的含义.

4.dysm 文件来源和作用

5.crash文件中崩溃的地址的手动解析的方法

什么是 dSYM 文件

Xcode编译项目后,我们会看到一个同名的 dSYM 文件,dSYM 是保存 16 进制函数地址映射信息的中转文件,我们调试的 symbols 都会包含在这个文件中,并且每次编译项目的时候都会生成一个新的 dSYM 文件,位于 /Users/<用户名>/Library/Developer/Xcode/Archives 目录下,对于每一个发布版本我们都很有必要保存对应的 Archives 文件 ( AUTOMATICALLY SAVE THE DSYM FILES 这篇文章介绍了通过脚本每次编译后都自动保存 dSYM 文件)。

dSYM 文件有什么作用

当我们软件 release 模式打包或上线后,不会像我们在 Xcode 中那样直观的看到用崩溃的错误,这个时候我们就需要分析 crash report 文件了,iOS 设备中会有日志文件保存我们每个应用出错的函数内存地址,通过 Xcode 的 Organizer 可以将 iOS 设备中的 DeviceLog 导出成 crash 文件,这个时候我们就可以通过出错的函数地址去查询 dSYM 文件中程序对应的函数名和文件名。大前提是我们需要有软件版本对应的 dSYM 文件,这也是为什么我们很有必要保存每个发布版本的 Archives 文件了。

一.xcode 还原法

每次打包app的时候 我们都会勾上两个选项.其中第二个选项就是我们上传的日志文件.


图形化分析crash日志_第1张图片

然后 我们就可以每周 来看一下 崩溃日志.xcode已经直接图形化崩溃日志并且有完整的调用栈. 这个 可能需要 将代码会退到和上传版本一样 的地方 ,否则会出现定位错误.

图形化分析crash日志_第2张图片

二.友盟还原法.

这种方法适用于线上App的错误分析.

这个是我们现在 正在使用的一种方法,就不细讲啦.

就是 打包之后获取当前 ipa包的dysm文件,上传到友盟后台.

三.dsymTools的工具还原法.手动解析方式.

比如:我们遇到一个 -[__NSArrayM objectAtIndex:]: index 50 beyond ,或则是字典报错,有时候能够定位到这个错误,但是有时候定位不到,只是给出了 内存地址.如果在项目中查找 那么多的数组,显然不是很现实.类似的定位不到位置的很多.那么我们这时就可以使用手动解析的方法.通过第三方工具直接定位到我们工程中代码的位置.

还有一种就是:测试的设备上的崩溃比较难以复现的bug 就直接连接设备 获取崩溃日志 然后进行手动解析!

1.获取设备的crash 文件

连接崩溃设备 获取crash 文件


图形化分析crash日志_第3张图片

2.选中"view device Logs "


图形化分析crash日志_第4张图片

2.选中自己的app

图形化分析crash日志_第5张图片

3.找到崩溃信息以工程名子开头的地方.后面的地址就是崩溃信息的内存地址


这里会有 两个地址

1>.sliderAddress

0x104450000

2>.错误信息内存地址

0x104750c2c

比如圈中的第一行地址:

4 YSPProject  0x104750c2c 0x104450000 + 3148844

前面的是内存地址 后面的是sliderAddress

4.获取对应版本的dym 文件.可以直接将打包出来的xcodeArchive文件拖入到dsymTools窗口里面,可以同是拖多个但是 不能重名.(目前 会自动检索你的本地xcodeArchive文件):如下


图形化分析crash日志_第6张图片

3.然后选择你的cpu类型


图形化分析crash日志_第7张图片

4.然后把 赋值 的地址依次填入到相应的位置中.


图形化分析crash日志_第8张图片

然后就可以看到代码中错误的地方.

你可能感兴趣的:(图形化分析crash日志)