iOS异常捕获-堆栈信息的解析

最近使用NSSetUncaughtExceptionHandler和signal方法捕获异常,并传到服务器,用来追踪线上app的异常信息。

但是捕获到的都是堆栈信息:
异常堆栈信息

如何利用这些堆栈信息查看报错方法名和行数?

异常信息

异常信息有三种类型:
1.已标记错误位置的:

test 0x000000010bfddd8c -[ViewController viewDidLoad] + 8588

这种信息已经很明确了,不用解析

2.有模块地址的情况:

test 0x00000001018157dc 0x100064000 + 24844252

以上面为例子,从左到右依次是:
二进制库名(test),调用方法的地址(0x00000001018157dc),模块地址(0x100064000)+偏移地址(24844252)

3.无模块地址的情况:

test 0x00000001018157dc test + 24844252

dSYM符号表获取

xcode->window->organizer->右键你的应用 show finder->右键.xcarchive 显示包内容->dSYMs->test.app.dYSM

atos命令

atos命令来符号化某个特定模块加载地址

atos [-arch 架构名] [-o 符号表] [-l 模块地址] [方法地址]

解析

使用终端,进到test.app.dYSM所在目录

一.如果是有模块地址的情况,运行:

atos -arch arm64 -o test.app.dSYM/Contents/Resources/DWARF/test -l 0x100064000 0x00000001018157dc

二.如果是无模块地址的情况

1.先将偏移地址转为16进制:

24844252 = 0x17B17DC

2.然后用方法的地址-偏移地址,得到的就是模块地址

0x00000001018157dc - 0x17B17DC = 0x100064000

3.最后运行:

atos -arch arm64 -o test.app.dSYM/Contents/Resources/DWARF/test -l 0x100064000 0x00000001018157dc

参考文章

iOS错误堆栈查找崩溃原因的方法
分析iOS Crash文件:符号化iOS Crash文件的3种方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值