crash日誌分析

d_d發表於2018-10-22

目的

當拿到app的crash日誌時通過相應堆疊資訊進行crash分析。

流程

1.拿到crash日誌

crash日誌分析

crash日誌分析

2.獲取crash堆疊。

雖然我們不能將日誌crash時的堆疊拿出來直接用,但是我們可以根據crash堆疊和Binary Image的堆疊資訊,求出crash堆疊相對偏移量,這個偏移量對相同版本庫是相同的。

4   RXLearn  	0x0000000104fe2b2c 0x104fdc000 + 27436
複製程式碼
0x104fdc000 - 0x104fe7fff RXLearn arm64  <a708945ca0f436beadaf5374b79e83da> /var/containers/Bundle/Application/1BEFBCC7-D1CB-43A7-814A-04B3FCC57D80/RXLearn.app/RXLearn
複製程式碼

根據上面兩條資訊可以得出此處的相對地址偏移量:

104fe2b2c - 104fdc000 = 6b2c
複製程式碼

3.執行專案列印堆疊資訊。

執行本地專案並通過image list命令列印專案映象檔案列表,從而獲取堆疊資訊。

crash日誌分析
找到對應的二進位制檔案,由基地址加上剛才求出的地址偏移量即可得到本地堆疊位置。

[  0] A708945C-A0F4-36BE-ADAF-5374B79E83DA 0x0000000104238000 /Users/dowZhang/Library/Developer/Xcode/DerivedData/RXLearn-ahxdedtmqieozkgedsbvhiqtbltt/Build/Products/Debug-iphoneos/RXLearn.app/RXLearn 
複製程式碼
104238000 + 6b2c = 10423eb2c
複製程式碼

通過image lookup --address命令列印出crash檔案及程式碼位置

(lldb) image lookup --address 0x000000010423eb2c
      Address: RXLearn[0x0000000100006b2c] (RXLearn.__TEXT.__text + 1684)
      Summary: RXLearn`RXLearn.RXElementViewController.touchesBegan(_: Swift.Set<__C.UITouch>, with: Swift.Optional<__C.UIEvent>) -> () + 196 at RXElementViewController.swift:29
(lldb) 
複製程式碼

可以看出crash檔案為RXElementViewController.swift、所在方法touchesBegan、所在行數29

16進位制計算工具