加入友盟统计功能后,友盟后台会有一个错误分析的统计项,点进去之后可以查看项目的错误报告:
这份报告所包含的主要信息有:
1、首行是错误的原因。
2、淡绿色的地址,这就是错误代码的位置。
3、 dSYM UUID,这个是dSYM文件的唯一标识。dSYM 是保存 16 进制函数地址映射信息的中转文件,我们调试的 symbols 都会包含在这个文件中,并且每次编译项目的时候都会生成一个新的 dSYM 文件。
4、CPU Type. 定位错误的时候,我们也需要用到这个参数。
了解了这些内容,下面我们要做的就是找出问题所在。
第一种方式:
找到当前工程的archivers文件,将其拖到下图的路径下,任意红色框的文件夹下即可,如图:
然后打开终端,跳到指定的版本目录下,如上图的1.0.5
然后我们回到第一步的界面,点开顶部(默认顶部会是最终的错误根源)的地址,我们会发现
将此段代码粘贴到终端中回车即可。
第二种方式:dSYMTools
https://github.com/answer-huang/dSYMTools
这是一个开源的项目,下载进行运行会得到如下页面
选择相应版本,勾选cpu类型,同友盟那个图表,然后将内存地址拷贝到错误信息内存地址处就可以看到错误信息:
这样就可以很容易的看到错误的信息并修正。
如果我们不知道我们的错误是哪个分支哪个版本,可以通过以下方法进行:
Dwarfdump,可以简便地检测出app和相应的dSYM是否匹配使用起来很简单。分三步即可。
1> 根据crash log,得到App的UUID。UUID是个字符串,由32个字符组成。得到了UUID,你才能知道是你的哪个版本在用户的iPhone上出了问题。
1.1> 使用xcode连接崩溃设备,打开window->organizer,左侧应用列表选中你的app,顶部tab切换到crash,找到你的crash,右键菜单show in finder->显示包内容->/DistributionInfos/all/Logs,即可看到当前类型的所有闪退列表。
1.2> 在终端执行以下命令。 Binary Images: 0xb6000 - 0xb7fff +Example armv7 <270a9b9d7a333a4a9f1aaf8186f81394> /var/mobile/Applications/28D4F177-D312-4D3B-A76C-C2ACB4CB7DAD/Example.app/Example 0x2feb5000 - 0x2fed6fff dyld armv7 <4a817f3e0def30d5ae2032157d889c1d> /usr/lib/dyld 这里,构建UUID是270a9b9d7a333a4a9f1aaf8186f81394,和路径应用程序的可执行文件是Example.app/Example。
2> 使用dwarfdump检查app,看哪个app是上面那个UUID。命令行格式:dwarfdump —uuid YourApp.app/YourApp
3> 用dwarfdump检查dSYM文件是否是上面的UUID。命令行格式:dwarfdump —uuid YourApp.app.dSYM如果三者的UUID都是一致的,那么恭喜你,该crash log可以被正确解析出来,stack traces信息可以被正确地拿到。