一、背景说明
当前文档是记录projectName项目在新版本发布后,XCode记录的崩溃日志的符号化的过程中,atos与symbolicatecrash工具的使用记录,网上也有一些教程,但是相对自己的项目而言,自己记录的文档在符号化工具和命令行使用中更加顺手。
二、分析工具
准备材料:
.dSYM文件(debugger Symbols):
打开mac mini打包机,打开Xcode,找到projectName项目,工具栏中依次选择Window-》Organizer。在打开的Organizer窗口中,
左侧顶部选择App(projectName),选择中间列出的Archive日志对应的版本v2.1.2,单击右键,选择Show in Finder,找到.xcarchive文件。
将archive文件打开,可以看到 .dSYM文件,由于打包机为公用,所以,将文件从打包机中copy出来,在个人电脑新建一个新文件夹crashFileV2.1.2备用。
打开终端,cd ~/Desktop/crashFileV2.1.2 执行
xcrun dwarfdump --uuid projectName.dYSM 输出 .dYSM文件uuid。
projectName.app文件:
上一步骤取dSYM文件我们已经找到了archive文件,在archive中,我们在同级文件中可以找到projectName.app文件,将此文件copy至与.dSYM文件同一文件地址下即crashFileV2.1.2文件夹。
打开终端,cd ~/Desktop/crashFileV2.1.2 执行
xcrun dwarfdump --uuid projectName.app/projectName
输出 .dYSM文件uuid.
注意: .app文件的uuid与.dYSM文件必须相同,证明是相互匹配的文件。
projectName.crash崩溃日志:
打开Xcode,找到projectName项目,工具栏中依次选择Window-》Organizer。
点击左侧crash列表 -> Show In Finder
找到对应崩溃记录的.xccrashpoint 文件 -> 右键显示包内容
\
logs中的崩溃日志均为XCode收集,可能存在多条崩溃日志,我们分析的崩溃日志的ID必须是与我们.dSYM文件相同,在此处我是在locallySymbolicated 文件下的此条日志,locallySymbolicated :局部符号化。根据这个名称大概可以猜到应该是与XCode自带分析工具symbolicatecrash工具有关。导出.crash文件至.dSYM文件同一文件地址下,即crashFileV2.1.2文件夹。
三、symbolicatecrash 和 atos 工具使用
symbolicatecrash的使用
在终端下打开crashV2.1.2文件夹,执行
$ find /Applications/Xcode.app -name symbolicatecrash -type f
找到 symbolicatecrash 工具地址.
执行copy命令,把symbolicatecrash 拷贝到crash文件同地址下,选择最后一个,对应的是真机,其余三个分别是手表、电视,模拟器。
cp/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash/Users/mac/Desktop/ipa/v2.1.4debug/testFile
执行设定环境变量命令行
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
执行符号化信息,输出crash_symbol.txt 文件
./symbolicatecrash /Users/你的电脑用户名/Desktop/crashtemp/temp.crash /Users/你电脑的用户名/Desktop/carshtemp/projectName.dSYM > Crash_symbol.txt
符号化前的内容:
符号化之后的内容:
atos 工具使用
atos是单行输出符号化结果的工具,每次输出对应地址的函数名称。
xcrun atos -o projectName.dSYM/Contents/Resources/DWARF/projectName -l 崩溃地址 -arch
Binary Architecture: arm64、armv6、armv7 armv7s 根据崩溃日志中手机的芯片架构来写。
Path to dSYM file: dSYM文件的路径,此处是projectName.app.dSYM
load address: 是运行时起始地址(基地址0x100048000 )
project案例
xcrun atos -o projectName.app.dSYM/Contents/Resources/DWARF/projectName-l 0x100048000 -arch arm64
符号化之后的效果