未符號化的崩潰日誌就象一本天書,看不懂,更別談分析崩潰原因了。所以我們在分析日誌之前,要把日誌翻譯成我們可以看得懂的文字。這一步我們稱之為符號化。
在ios crash分析(文一)中已經提到過符號化的兩種方式:
1.利用xcode符號化
2.利用symbolicatecrash指令碼符號化
其實這兩種分析方式都使用了同乙個工具符號化:***atos***。
atos
是蘋果提供的符號化工具,在mac os系統下預設安裝。
使用***atos***符號化需要dsym檔案。dsym檔案是在編譯工程的時候生成的,可以在xcode organizer的archives標籤欄下找到所有已歸檔的應用檔案。它儲存了編譯過程的詳細資訊,其中包括符號資訊。
注意: 你必需同時保留應用二進位制檔案和.dsym檔案才能將崩潰日誌完整符號化。每次提交到itunes connect的構建都必需歸檔。
.dsym檔案和二進位制檔案是特定繫結於每一次構建和後續構建的,即使來自相同的源**檔案,每一次構建也與其他構建不同,不能相互替換。
如果你使用build 和 archive 命令,這些檔案會自動放在適當位置。 如果不是使用build 和 archive命令,放在spotlight能夠搜尋到的位置(比如home目錄)即可。
下面我們用***atos***對一條crash進行符號化
還是看下面的例子:
### 1.程序資訊 ###
incident identifier: e4201f10-6f5f-40f9-b938-bb3da8ed7d50
crashreporter key: todo
hardware model: iphone4,1
process: taobao4iphone [3538]
identifier: com.taobao.taobao4iphone
version: 4.8.1
code type: arm
parent process: launchd [1]
### 2.基本資訊 ###
date/time: 2014-09-16 21:39:30 +0000
os version: iphone os 7.1.2 (11d257)
report version: 104
### 3.異常資訊 ###
exception type: sigsegv
exception codes: segv_accerr at 0xa2400db3
crashed thread: 0
### 4.執行緒回溯 ###
### 5.crash呼叫堆疊 ###
thread 0 crashed:
0 libobjc.a.dylib 0x3838760c 0x38375000 + 75276
1 taobao4iphone 0x012c03e1 0x66000 + 19244001
2 taobao4iphone 0x012c054f 0x66000 + 19244367
3 foundation 0x2e4de163 0x2e419000 + 807267
4 corefoundation 0x2dac9167 0x2da2a000 + 651623
5 corefoundation 0x2dac8d7f 0x2da2a000 + 650623
6 corefoundation 0x2dac711b 0x2da2a000 + 643355
7 corefoundation 0x2da31ebf 0x2da2a000 + 32447
8 corefoundation 0x2da31ca3 0x2da2a000 + 31907
9 graphicsservices 0x3298b663 0x32982000 + 38499
10 uikit 0x3037e14d 0x30310000 + 450893
11 taobao4iphone 0x0006b349 0x66000 + 21321
12 taobao4iphone 0x0006a5e8 0x66000 + 17896
thread 1:
0 libsystem_kernel.dylib 0x38928808 0x38928000 + 2056
1 libdispatch.dylib 0x38869e03 0x3885f000 + 44547
### 5.動態庫資訊 ###
binary images:
0x9fa9000 - 0x9fb4fff quickspeak armv7 /system/library/accessibilitybundles/quickspeak.bundle/quickspeak
0x2c667000 - 0x2c669fff axspeechimplementation armv7 /system/library/accessibilitybundles/axspeechimplementation.bundle/axspeechimplementation
我從中選出一條呼叫進行符號化:
1 taobao4iphone 0x012c03e1 0x66000 + 19244001
使用下面的命令符號化:
結果:
1 taobao4iphone 0x012c03e1 -[tbsnspagescontainerview subviewlayoutpage:] (in taobao4iphone) (tbsnspagescontainer.m:227)
可以看到崩潰的類為tbsnspagescontainerview,函式為subviewlayoutpage,檔名是tbsnspagescontainer.m,行數是227行。
我們返回來看一下atos用法:
atos -o dysm檔案路徑 -l 模組load位址 -arch cpu指令集種類 呼叫方法的位址
dysm檔案路徑
:可以在xcode organizer的archives標籤欄下找到所有已歸檔的應用檔案。它儲存了編譯過程的詳細資訊,其中包括符號資訊。
模組load位址
:模組載入的基位址,可以在日誌的***動態庫資訊***中找到對應模組的基位址。這裡為0x66000
cpu指令集種類
那麼taobao4iphone模組的cpu指令集為armv7
呼叫方法的位址
:這裡是0x012c03e1,在ios crash分析(文二)
中做過解釋
iOS crash檔案符號化不出系統方法
最近符號化crash檔案發現個問題,就是有些crash檔案在符號化的時候自己工程的 解析如下圖 解決方法 例 找到對應系統的手機 連線mac,xcode第一次連線某台裝置進行真機除錯時,會看到xcode顯示processing symbol files,這時候就是在拷貝真機上的符號檔案到mac系統的...
iOS Crash 捕獲及堆疊符號化思路剖析
最近在做 crash 分析方面的工作,發現 ios 的崩潰捕獲和堆疊符號化雖然已經有很多資料可以參考,但是沒有比較完善的成套解決方案,導致操作起來還是要踩很多坑,耽誤了很多時間。所以想做乙個總結,闡述 crash 收集分析的整體思路和出坑指南,具體細節實現會給出相關參考資料。有了思路,實現也就 so...
文字符號化 Fslex
文字符號化 fslex 文字符號化 tokenizing,有時也叫詞法分析,lexical analysis 或 lexing 其基本意思是把文字分成可管理的塊 lump 或符號 token 要用到工具fslex.exe,它本身就是建立詞法分析器 有時也叫掃瞄器,scanner 進行文字符號化的程式...