【前言】
本文全部的实践均针对不是在自己本机上打包的。(如果是在自己机子上打包的,符号化就是比较简单。T0T)
【目录】
1. 友盟日志查看
2. 解析ips日志 (方法二可用于crash文件符号化)
2.1 方法一:命令行解析ips
2.2 方法二:使用Xcode解析ips/crash(比方法一更简便,该方法也适用于crash文件)
1. 友盟日志查看
【前提准备】:找到打包的人,要对应的xcarchive文件。
1. 去友盟上找到崩溃日志。如图1-1,步骤如下:
1.1)友盟首页找到【U-APP】,点击进入。
1.2)点击【立即使用】。
1.3)左上角选择我们的应用。
1.4)【错误分析】-【错误列表】-选择相应的版本-选择日期。如果有bug的话,页面会显示出来。
图1-1
2. 获取xcarchive文件中DWARF的路径
如图1-2。步骤如下:
2.1)右键xcarchive文件,点击【显示包内容】。
2.2)点击dSYMs,找到.dSYM文件,右键点击【显示包内容】。
2.3)依次点击目录:Contents--Resources。找到DWARF文件夹。
2.4)打开终端,输入CD,选中DWARF文件夹,拖到终端上。回车。这时候,终端进入了DWARF。
图1-2
3. 开始符号化
如图1-3。步骤如下:
3.1)在友盟上找到日志的堆栈,复制要查看的堆栈的内存地址。
3.2)在终端输入
atos -arch arm64 -o 项目名称 友盟日志上的内存地址
回车。即可看到该内存地址对应的调用堆栈地址。如图1-3。里面显示了哪个文件下的第几行
图1-3
2. 解析ips日志 (方法二可用于crash文件符号化)
【前提准备】:找到打包的人,要对应的xcarchive文件。
有两种方法。其中方法二比较简单,且方法二可用于crash文件的符号化,所以,推荐使用方法二。但是由于方法二其实是方法一的简便操作,所以把方法一放到前面来。
2.1 方法一:命令行解析ips
1.新建一个文件夹,名字叫Acrash。
2.拷贝.ips文件放到Acrash中,并将.ips文件后缀名该为.crash。
3.前往文件夹路径:【/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash】,找到symbolicatecrash。拷贝symbolicatecrash工具拷贝到Acrash中。
4. 从xcarchive文件里,右键点击【显示包内容】,从Products/Applications里面拷贝.app文件(操作类似图1-2)。放到Acrash中。
5. 从xcarchive文件里,右键点击【显示包内容】,拷贝dSYMs文件下的.dSYM文件(操作类似图1-2)。放到Acrash中。
至此,Acrash文件中总共有4个文件:.crash文件、symbolicatecrash工具、app文件、.dSYM文件。如图2-1。
图2-1
6.开始解析
如图2-2。步骤如下:
6.1)打开终端,cd到Acrash文件夹下的路径。
6.2)输入命令
./symbolicatecrash .crash文件的绝对路径 .dSYM的绝对路径 > log.crash
回车。
【注意1】:log.crash是符号化后的文件名。可以自定义文件名(后缀一定是.crash哈)。
【注意2】:在6.2)步骤之后,终端有可能会报错Error:
Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69.. 这时候在终端中再输入
export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer
然后再次运行6.2)的命令。应该就能看到Acrash文件夹下,可以发现多了一个文件:log.crash。
【注意3】:./symbolicatecrash命令的参数,一定要是先【.crash文件的绝对路径】,再【.dSYM的绝对路径】,否则,会报错,报错如下:
Use of uninitialized value $data in substitution (s///) at ./symbolicatecrash line 919.
Use of uninitialized value $data in substitution (s///) at ./symbolicatecrash line 922.
Use of uninitialized value $data in substitution (s///) at ./symbolicatecrash line 926.
Use of uninitialized value in pattern match (m//) at ./symbolicatecrash line 473.
Use of uninitialized value in scalar assignment at ./symbolicatecrash line 488.
6.3)我们回到Acrash文件夹下,可以发现多了一个文件:log.crash。该文件就是ips符号化后的结果,如图2-3。
图2-2
图2-3
2.2 方法二:使用Xcode解析ips/crash(比方法一更简便,该方法也适用于crash文件)
1. 新建Acrash文件夹。
2. 将.app和.dSYM文件放到Acrash文件夹中(操作类似图1-2)
3. 命令行执行
mdimport Acarsh
该命令的作用是让Xcode能通过spotlight,找到其uuid与crash log中携带的uuid一摸一样的dSYM文件与.app文件。进而进行符号化。
【注意】:注意查看当前路径不能处于Acrash中。否则会出现错误:could not find path 'Acrash',如图2-4
图2-4
4. 找到一个能连接上Xcode的测试机(只要能连接上都可以),数据线连上手机和Xcode
5. Xcode中, 点击“Window”--“Devices and Simulators ”
6. 切换到“Devices”,选择“View Devices Log”,将ips/crash文件拖拽到左侧的log列表中,如图2-5。
图2-5
7. 过一小会,可以看到列表里面新添加了一个log。该log,就是ips符号化后的文件。