iOS Crash 分析(文三) 符號化崩潰日誌

2021-06-27 02:24:55 字數 3670 閱讀 8949

未符號化的崩潰日誌就象一本天書,看不懂,更別談分析崩潰原因了。所以我們在分析日誌之前,要把日誌翻譯成我們可以看得懂的文字。這一步我們稱之為符號化。

在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 進行文字符號化的程式...