crash日志分析

304 阅读2分钟

目的

当拿到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

16进制计算工具