Xcode 根据崩溃信息定位到某一行代码

前言

最近,因为调试的问题浪费了不少时间,之前不打印崩溃日志的问题,近日又遇到崩溃信息无法定位到具体代码,只是简单的报错信息:

类似这样的:
-[NSNull length]: unrecognized selector sent to instance 0x1b74e0878

表面看是因为 调用 length 崩了,全局搜了 length 打断点也无济于事,实在头大,找了各种方法:

方法一:

第一步:需要保存打包的dSYMs文件(查找的时候一定要找到对应的dSYMs文件,不然找不到对应的代码)

image.png

找到最终需要的符号表文件:

image.png

第二步:打开终端,

dwarfdump --arch=arm64 --lookup 0x1b6e54878 (报错的内存地址) /Users/username/Library/Developer/Xcode/Archives/2018-11-11/GantangBus\ 2018-11-11\ 下午8.08.xcarchive/dSYMs/GantangBus.app.dSYM

后边为项目符号表的目录,一定是到 app.dSYM 结束,回车:

image.png

恭喜你中奖了,然并卵,这种方式实用于 release 版本的,本地打包的 release 版本也不行,因为 debug 版本 打包后压根没有 符号表文件,并且是上线以后用报错的地址,在上线的这个符号表中才能知道的,适用于上线后的调试,我猜测是这样,苹果有一个随机地址分配。

像集成腾讯 的 Bugly 上线后上传符号表文件,随后就看到找到相应报错的代码在第几行了,其他的一个原理。

方法一 kill;

方法二:

其实就是 Xcode 的全局断点,突然给忘了,忽略了,一时没想起来,网上查阅时才想起来,以前有的时候可能会不好使,有的好使,其实很简单 ,如下:

  1. 在 XCode 界面中按cmd + 相应的序号,快捷键,或者直接点击选项卡,跳到Breakpoint的tab 下

image.png

  1. 然后点击左下角的+号,增加一个Exception的断点,如下图所示。

image.png

  1. 点击接下来会出现一个“All Exception”的调试选项:

image.png

其实已经 OK 了,一个全局断点已经添加了,将鼠标放到上面,右击选择“Edit Breakpoint”,可以查看选项的具体内容如下:(不用做任何修改,也可以设置相应的条件,编辑断点)

image.png

OK,大功告成,当异常出现时,会自动停在异常处,而不会抛出到UIApplicationMain。就可以定位到具体抛出异常的代码了,完美的解决了我的问题,以前没发现这么好使,就没怎么用了,可能没注意到吧!

直接定位到我的代码行数,原来是因为后台的数据有一条为 null 的情况,没有做处理造成的。

attributionName = "<null>"

 



作者:Superman168
链接:https://www.jianshu.com/p/6b6a6ca68c2b
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值