一、如果連著本機(jī)的手機(jī),運(yùn)行Xcode發(fā)生crash,解析如下:
(1) 在Xcode中找到crash文件(Window->Devices);
(2) 找到設(shè)備,點(diǎn)擊View Devices Logs,找到發(fā)生的crash文件;
(3) 右擊crash文件,點(diǎn)擊Re-Symbolicate Log后crash就自動(dòng)解析。
二、很多時(shí)候有人拿著線上的版本來找開發(fā),說APP崩潰了,你幫忙看下原因,這個(gè)時(shí)候我們插上了手機(jī),在Xcode上運(yùn)行了,可是崩潰并沒有復(fù)現(xiàn),那么怎么辦呢?
1、在桌面新建一個(gè)文件夾,名字叫crash
2、打開Xcode,導(dǎo)出崩潰日志
鏈接設(shè)備到Xcode,點(diǎn)擊window--->Devices---->選中你的iPhone設(shè)備---->點(diǎn)擊View Device Logs
選中你的崩潰應(yīng)用信息,右鍵選擇export log,導(dǎo)出到你剛剛新建的文件夾中
導(dǎo)出崩潰日志.png
3、在Finder上右鍵選擇前往文件夾,輸入下面的地址
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
把這個(gè)拷貝到你新建的文件夾中,這是個(gè)解析crash的腳本
4、導(dǎo)出dSYM文件
我們?cè)诎l(fā)版的時(shí)候,都會(huì)保留一份dSYM文件,把對(duì)應(yīng)的版本的dSYM文件拷貝到你新建的文件夾中(每次發(fā)版千萬記得保存)
Xcode在每次運(yùn)行的時(shí)候都會(huì)有一份對(duì)應(yīng)dSYM與你運(yùn)行的程序相對(duì)應(yīng),要想解出crash,必須找到crash對(duì)應(yīng)的程序的dSYM文件
另外插一句,Xcode的dSYM文件除了會(huì)在發(fā)包的時(shí)候生成,平常我們運(yùn)行的時(shí)候都會(huì)生成,打開路徑是,右鍵下面這個(gè)文件,showInFinder

跟它平級(jí)的有個(gè).dSYM文件,這就是我們每次運(yùn)行生成的文件,也是我們解crash需要的

如果你沒有看到這個(gè)文件,那么一定是你把開關(guān)關(guān)掉了,進(jìn)到工程里進(jìn)行如下設(shè)置后再編譯就可以了

5、現(xiàn)在你的文件夾里應(yīng)該有這三個(gè)文件
文件夾中的內(nèi)容.png
6、打開終端輸入如下命令
cd /Users/Summer/Desktop/crash // 進(jìn)入到你的文件夾中
./symbolicatecrash ./*.crash ./*.app.dSYM > symbol.crash // 進(jìn)行crash日志解析
如果終端報(bào)如下錯(cuò)誤
Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69.
需要接著輸入下面這條指令,告訴終端 "DEVELOPER_DIR" 的位置
export DEVELOPER_DIR="/Applications/XCode.app/Contents/Developer"
然后再輸入
./symbolicatecrash ./*.crash ./*.app.dSYM > symbol.crash
7、之后就可以在你的文件夾中就會(huì)出現(xiàn)這個(gè)問件
解析好的crash日志.png
這個(gè)就是解析好的crash日志
三、在Jenkins上下的包發(fā)生crash有兩種情況,一種是可以提供給你發(fā)生crash的手機(jī),一種是沒有手機(jī),只有crash日志,下面分情況來討論
(一)提供發(fā)生crash的手機(jī)
1、到Jenkins上面找到你構(gòu)建的版本,打開
下載如下兩個(gè)文件,路徑隨意

2、鏈接設(shè)備到Xcode,點(diǎn)擊window--->Devices---->選中你的iPhone設(shè)備---->點(diǎn)擊View Device Logs
下載完成后會(huì)出現(xiàn)如下的文件

3、右鍵選中ipa格式的文件,選擇打開方式--->歸檔實(shí)用工具
4、之后回到Xcode中,選中要解析的那條log,點(diǎn)擊右鍵,選擇Re-Symbolicate-Log

這樣就能把崩潰信息解析出來

圖例中是最近的一條,crash的位置是JDBCallManager的348行,這樣就可以對(duì)其進(jìn)行修改了~
(二)沒有crash手機(jī),只有crash日志
1、本地新建一個(gè)文件夾,如crash,下載crash文件到這個(gè)文件夾中
2、在Jenkins上找到發(fā)生crash的那一次構(gòu)建,打開,下載.dSYM.Zip包,并解壓這個(gè)包,在很深的層次里面,有一個(gè).app.dSYM的文件(沒有找到就一直郵件顯示包內(nèi)容,知道找到這個(gè)文件為止),將這個(gè)文件拷貝出來,到你新建的crash文件夾下
3、獲取Xcode的symbolicatecrash腳本文件,文件所在目錄為
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
將symbolicatecrash文件拷貝到crash文件同一個(gè)文件夾下
4、打開終端,到crash文件下執(zhí)行crash解析命令
./symbolicatecrash ./.crash ./.app.dSYM > symbol.crash
會(huì)生成一個(gè)symbol.crash文件,這個(gè)文件內(nèi)容就是解析crash后所需要的內(nèi)容。
PS: 若報(bào)錯(cuò)
Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash, 只需在終端中運(yùn)行
export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"
(包版本號(hào)可以從crash文件中獲取,version里就有)
如果想還原某一行,使用如下命令
atos -o (上文中.app.dSYM文件右鍵顯示包內(nèi)容,一直剝離到標(biāo)有你工程名字的那一層,把那個(gè)文件的地址拖進(jìn)來,這個(gè)文件的那一層已經(jīng)是最后一層,不能再剝離了) -arch arm64 -l (crash日志里你想要解析的那一行從前面數(shù)第四列數(shù)字,復(fù)制過來,例如:0x1000a8000) (crash日志里你想要解析的那一行從前面數(shù)第三列數(shù)字,復(fù)制過來,例如:0x00000001009d80fc )回車就可以看到解析出來的這一行,完整示例
atos -o /Users/Chandler/Downloads/JDBClient.app.dSYM/Contents/Resources/DWARF/JDBClient -arch arm64 -l 0x1000a8000 0x00000001009d80fc


