以前對于這方面了解的很少簸搞,在工作中需要用到這方面的東西扁位,所以,把自己學習的東西寫出來分享一下趁俊。
對于carsh日志來說域仇,我們有這么幾種的獲取方式:
1,直接從真機獲取寺擂,連接手機暇务,然后在Xcode->Device->View Device Log 然后找對對應的app日志。結果如下圖所示:
像這樣的其實是已經(jīng)符號化完成的日志怔软,我們可以看出是在什么方法中哪一個類中產(chǎn)生的崩潰垦细。
2.就是使用類似bugly的第三方。這樣的第三方會收集崩潰信息挡逼,雖然這樣的第三方已經(jīng)對崩潰信息進行了符號化括改。但是有時候并不能準確的定位到是哪一個類哪一個方法產(chǎn)生的崩潰。那就需要我們對收集到的crash日志進行符號化家坎。
Crash日志包含了進程信息嘱能、基本信息、異常信息虱疏、線程回溯惹骂、Crash的調用棧、動態(tài)庫的信息做瞪。對于這樣的日志对粪,如果沒有符號化是基本不可能出崩潰出現(xiàn)的地方的,所以需要對Crash日志進行符號化處理装蓬。符號化處理的方式有一下兩種:
1.Xcode符號化
2.symbolicatecrash腳本符號化
但是這兩種符號化的方式都是基于atos(mac自帶)衩侥。這里就講一下如何利用atos對Crash日志進行符號化處理。使用atos符號化矛物,首先要找到dSYM文件。dSYM文件是在編譯時生成的跪但,可以在Xcode-Window-Organizer-Archives中找到打包后的文件顯示包內(nèi)容履羞,即可找到dSYM文件峦萎。
使用如下的atos命令就可以符號化的處理:
atos -arch 內(nèi)核類型 -o dSYM 路徑 -l base address load address
在實際中,由于Crash日記的搜集是我們自己弄得忆首,在計算load address的時候遇到了一些問題爱榔,這里把如何計算load address的方法也寫一下
NSString *slide = @"";
for (uint32_t i = 0; i < _dyld_image_count(); i++) {
if (_dyld_get_image_header(i)->filetype == MH_EXECUTE) {
slide = [NSString stringWithFormat:@"%lx", _dyld_get_image_vmaddr_slide(i)];
break;
}
}
后來找到了個大神寫的符號化的工具很方便我把它分享出來地址如下:https://pan.baidu.com/s/1c2oo3vE
如果有不對的地方或不明白的地方請給我留言!