目的
當拿到app的crash日誌時通過相應堆疊資訊進行crash分析。
流程
1.拿到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
命令列印專案映象檔案列表,從而獲取堆疊資訊。
[ 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
。