崩溃日志分析工具-atos、Symbolicatecrash

3,237 阅读3分钟

一、背景说明

当前文档是记录projectName项目在新版本发布后,XCode记录的崩溃日志的符号化的过程中,atos与symbolicatecrash工具的使用记录,网上也有一些教程,但是相对自己的项目而言,自己记录的文档在符号化工具和命令行使用中更加顺手。

二、分析工具

准备材料:

.dSYM文件(debugger Symbols):

打开mac mini打包机,打开Xcode,找到projectName项目,工具栏中依次选择Window-》Organizer。在打开的Organizer窗口中,

image.png

左侧顶部选择App(projectName),选择中间列出的Archive日志对应的版本v2.1.2,单击右键,选择Show in Finder,找到.xcarchive文件。 

image.png

将archive文件打开,可以看到  .dSYM文件,由于打包机为公用,所以,将文件从打包机中copy出来,在个人电脑新建一个新文件夹crashFileV2.1.2备用。

打开终端,cd ~/Desktop/crashFileV2.1.2 执行

image.png

    xcrun dwarfdump --uuid projectName.dYSM 输出 .dYSM文件uuid。

projectName.app文件:

上一步骤取dSYM文件我们已经找到了archive文件,在archive中,我们在同级文件中可以找到projectName.app文件,将此文件copy至与.dSYM文件同一文件地址下即crashFileV2.1.2文件夹。

image.png

打开终端,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 文件 -> 右键显示包内容

\

image.png

image.png

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 工具地址.

image.png

执行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

符号化前的内容:

image.png

符号化之后的内容:

image.png

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

image.png

符号化之后的效果

image.png