目的
当拿到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
。