追查EXC_BAD_ACCESS没有NSZombie?(Tracking down EXC_BAD_

2019-10-23 13:45发布

我已经在这呆了两天,我仍然无法找到失事的原因。

我知道它是与试图访问已经被释放的对象,但我不知道是哪个接入或对象。

每当我谷歌试图找到EXC_BAD_ACCESS人源使用NSZombies建议。 问题是,当我让僵尸(无论是通过环境变量或通过性能ObjectAlloc中的Xcode工具)程序不崩溃,它通常不会和僵尸不报任何东西(没有在日志中显示出来,并没有什么标记中仪器)。 是不是有什么我与NSZombie失踪?

我试图利用从Xcode的调试器,并从在ObjectAlloc中的一些仪器信息,但所有的信息是非常神秘的,并没有真正帮助我。

我已经设置了调试器停止对Objective-C的异常。 当它它这是显示的调用堆栈:

0 objc_msgSend
1 ??
2 -[UITableViewCell removeFromSuperView]
3 -[UIView dealloc]
... etc ...

首先,这是怎么回事用“1?” ? 什么是问号是什么意思? 其次重要的是我怎么能知道这是在我的代码叫什么名字? 陈述的所有操作都太普通了(如UIView的dealloc的,但是UIView的?在哪里?)。

此外,当发生异常它所指向的汇编代码一遍,不会做我任何好处,除非我花时间试图找出代码做什么。 我知道有些装配,但必须一个更好的办法,对吧?

有什么办法,我可以得到有意义的信息,什么是在我的代码运行发生异常前的最后一行?

我已经试过周围洒些NSLogs和断点,但它并不能帮助我很多,因为崩溃发生后,我突然从一个导航控制器的视图控制器。 我到处都设置断点的断点达到正常(我无法找到一个点暴跌 ,打破)。 当我在发生异常时调试器“继续”这是唯一的。 这是因为如果在崩溃发生的我的代码之外,所以我不知道在哪里可以得到它的句柄。

我已经通过我的代码看起来和双重检查,我坚持所有的内存管理规则(至少据我所知)。 我敢肯定,这东西很微妙,但我似乎无法找到它。

如果任何人有任何想法如何找到这样的错误不NSZombie请分享。

谢谢。

Answer 1:

好吧,我发现这个问题。 我有一个自定义的表格单元格类我把它叫做[超级的dealloc]首先在dealloc方法(而不是最后一个)。 我想我在匆忙写了这个类,并没有真正去想它。 我猜的东西在孩子需要释放父得到释放?

所以,我没有一个真正的答案,以我自己的问题,但我基本上使用的临时代码跟踪和各种调试技术(断点,NSLogs,试图正是DeCypher神秘的堆栈跟踪等)的组合中发现的问题。

其实主要策略,帮助我被位注释掉的代码位,直到我剥离下来的问题区域划分为简单,因为它得到,同时仍保持完好崩溃。 这让我意识到这个问题是不是我认为这将是但在一个更微妙的区域(例如在次要类的在这种情况下dealloc方法)。

我希望这能有点帮助别人。 我将离开这个问题没有答案了一下柜面有人不依靠NSZombies更彻底的调试策略。 此外,如果有人能澄清这两个问号在堆栈跟踪,这将是有帮助的意思。



文章来源: Tracking down EXC_BAD_ACCESS without NSZombie?