如何追踪SIGABRT错误的原因

41
我展示这个问题的代码只是为了举例说明,我的问题是:我该如何追踪和理解SIGABRT错误?我阅读了这个问题:没有错误消息的sigabrt,但我认为这与我的问题无关。
下面我将展示的示例显然不是xib问题,之前遇到SIGABRT似乎更多是由于未处理的异常引起的。我尝试使用GDB的bt,但这并没有帮助。难道没有更全面的转储可供查看吗?我还使用了NSZombie,但我真的不知道该如何使用它,所以如果您的答案是这个,请提供有关如何从中获取相关数据的文档链接。
这是我的示例:我正在尝试使用Core Data。我的项目最初没有设置它,所以我必须手动添加它,我通过进入我的项目> Build Phases>Link Binary with Libraries>点击加号并添加CoreData.framework来完成。
然后,我通过转到文件>新建>数据模型来创建我的数据模型。我创建了很多属性,就这样。
之后,我向应用程序委托添加了正确的方法(我通过创建一个具有Core Data的新项目,然后复制方法来完成的)。
//code removed, as its not needed for the question/answer

接下来我尝试将一个值保存到托管对象中(同样是从默认实现中复制的代码,用于新项目):

//code removed, as its not needed for the question/answer

但是当我执行addTime方法时,我得到的只是SIGABRT错误。

xcode error


我因为之前的一篇帖子上留下的另一个评论而重新阅读了这篇文章。我可以理解如果它不易读,但你在哪个部分遇到了问题? - owen gerig
对不起,乔希,我会仔细检查并更改一些东西(英语从来不是我的强项),我肯定不想因为某些人没有理解问题而排除任何人回答。但如果这只是一些强迫症的事情,那么“为什么是我”。 - owen gerig
你已经做到了,谢谢。就像我说的,在发布后我重新阅读了这篇文章,希望不会再遇到这样的评论。我从来没有正确地写过东西,也从来没有这个需要,所以这将是一个非常难改掉的习惯,但在未来我会尝试改进。 - owen gerig
1个回答

73

SIGABRT错误是指对象接收到未实现的消息。你的应用程序有多少个警告呢?试着查看它们,如果你看到了“某些对象可能无法响应某些选择器”的警告,把所有这些警告都清除掉,很可能就可以正确地运行了。

编辑:下面评论中的回答非常有帮助:

好的,这里来了重炮-你尝试过使用断点吗?在项目资源管理器中打开第六个选项卡,在左下角点击+ -> 添加异常断点 -> 完成。这将添加一个异常处理程序,会在导致应用程序崩溃的方法调用处停止您的应用程序。

编辑:从xCode 5.0开始 > 在创建断点时不再需要指定断点要捕获的异常类型,只需要按+ -> 添加异常断点即可。

输入图片描述


我总共有4个问题(其中3个是未使用的对象,第三个是不兼容的指针类型),但这些都没有涉及到上面使用的任何类。 - owen gerig

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接