如何在没有符号的crash日志里定位错误代码,这的结合crash日志,和iDA能查看.首先我们来分析一下crash日志的结构
1.首先看到图中的crash日志堆栈信息的0x102920000表示是mach-o的入口地址,+299612表示是mach-o里的偏移地址,转换成16进制为0x4925c
图一
2.在ida中查看0x4925c的地址所在汇编代码:是main里的代码
图二
这和恢复符号之后的代码完全吻合:
图三
3.别急上面的crash代码只是一部分,我们来还原真正的crash代码,last exception Backtrace ,我们要找到堆栈信息里属于当前app的地址.
@1.第一步确定MTSS_SDKTestDemo在内存中的地址范围,crash日志下拉到Binary Images段,查看得知地址范围为0x102920000~0x102c57fff
@2.找到last exception Backtrace中在0x102920000~0x102c57fff范围的地址,计算出他们的偏移量
0x1029682c8 - 0x102920000 -> 0x482C8
0x10297c3b4 - 0x102920000 -> 0x5C3B4
0x10297c09c - 0x102920000 -> 0x5C09C
0x102977564 - 0x102920000 -> 0x57564
0x482C8在ida查看为,定位到为+[SignalCrashTest throwNil]方法中执行字典赋值导致的nil崩溃
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。