【iOS】atos命令符化号crash文件

程序员定位bug的方式千千万,这是其中一种。
测试在测试中,客户在使用中难免会遇到各种各样的bug崩溃,此时找到你,就需要能够定位bug位置,并解决bug。

首先我们需要准备两个个文件,appName.app. dSYM.crash并将他们放在同一个文件夹下。

appName.app. dSYM

这个文件分两种情况:

1.Xcode直接打包安装到手机

可以如下图所示直接右击并点击Show in Finder,在同目录下寻找.dSYM文件。


如果没有.dSYM文件,很有可能是Debug下没有生成.dSYM。可以在Buid Setting中打开该选项。

2.利用.ipa安装(包括appStore、hoc证书分发)

可以在Xcode->Window-Organizer中找到当时打包的. xcarchive文件,然后右击Show In Finder,找到文件后右击显示包内容,然后在里面找到appName.app. dSYM文件。

.crash

可以直接连接手机,打开Xcode->Window->Devide and Simulators,然后选择对应的Device,并点击View Device Logs,根据时间点选择对应的crash文件。

开始符号化

1.将两个文件放入同一个文件夹中后,打开终端并cd到对应文件夹下
2.查看DSYM文件UUID

dwarfdump --uuid appName.app.dSYM
//输出结果:UUID: ECCA19DE-145B-3F22-BA41-6252F7570BFB (arm64) appName.app.dSYM/Contents/Resources/DWARF/appName

3.查看.crash UUID,利用Sublime Text等工具直接打开.crash文件,滚动到Binary Images:位置后,<ecca19de145b3f22ba416252f7570bfb>这个就是.crash的UUID,两个UUID必须完全一致,否则将无法正确符号化。

0x1004f0000 - 0x101943fff appName arm64  <ecca19de145b3f22ba416252f7570bfb> /var/containers/Bundle/Application/7465D6C7-DBD9-458B-9B25-3BE599C09AF8/appName.app/appName

3.分析.crash文件

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libswiftCore.dylib              0x00000001cb264b00 specialized _fatalErrorMessage+ 2112256 (_:_:file:line:flags:) + 296
1   libswiftCore.dylib              0x00000001cb264b00 specialized _fatalErrorMessage+ 2112256 (_:_:file:line:flags:) + 296
2   libswiftCore.dylib              0x00000001cb070524 _ArrayBuffer._checkInoutAndNativeTypeCheckedBounds+ 62756 (_:wasNativeTypeChecked:) + 232
3   libswiftCore.dylib              0x00000001cb073510 Array.subscript.getter + 84
4   appName                             0x00000001005feba0 0x1004f0000 + 1108896
5   appName                             0x00000001005fcc88 0x1004f0000 + 1100936
6   appName                             0x00000001005fce84 0x1004f0000 + 1101444
7   UIKitCore                       0x00000001c9f180f0 -[UIApplication 

可以看到是Thread 0 Crashed

3.执行如下命令,然后在换行处输入:0x00000001005feba0(这个根据上面分析.crash文件获得的具体地址)
arm64是架构 ,appName是app文件,0x1004f0000是基地址

xcrun atos -o appName.app.dSYM/Contents/Resources/DWARF/appName -l 0x1004f0000 -arch arm64

终端输出:

AppDelegate.updateRootViewController() (in ) (AppDelegate.swift:104)

此时此刻,定位到了bug具体的位置,如果没定位成功可以继续选择其他的地址试试看。。。。

推荐阅读更多精彩内容