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>"

还有数组越界的情况,很常见了,定位很准确!!!赞一个,重新启用

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 无论你是在技术栈中使用 Swift,Objective-C,C++,C,还是完全不同的语言,都需要学习如何创建断点...
    KarenLoo阅读 5,385评论 0 3
  • 寒风冬日,落魄的钟声再次猛烈响起让凄苦震耳欲聋,原本艰辛的北漂生涯再度摇摇欲坠,只是这场逃徙来的猝不及防...
    婉hw阅读 773评论 1 2
  • 期盼的热闹 心却又一次的游离 我的思维遭到了蛀虫的啃噬 总给我带来片刻的恍惚 低垂的头 孤寂的心 这微笑的背后是苦...
    静若青莲阅读 1,930评论 19 33
  • CHAPTER 2 Offred一夜未睡,她躺在床上,等待着“眼睛”的敲门声。他们会问夫人您家的使女在家吗?没什么...
    gibacat阅读 2,087评论 0 0
  • 要求: 1.佳明心率手表一只 本文以佳明fen3hr为例,如果是其他佳明手表可能在操作上稍有不同。 2.数据充电线...
    可可V西里阅读 5,435评论 1 1