如何追踪SIGABRT的原因

时间:2011-11-09 21:42:23

标签: objective-c cocoa-touch crash sigabrt

我出于示例目的显示了此问题的代码,但实际上我的问题是:我应该如何跟踪并理解SIGABRT错误?我读到了这个问题:sigabrt with no error message,但我不认为这与我的问题有关。

我将在下面展示的示例显然不是xib问题,之前获得SIGABRT似乎更多地与未处理的异常有关。我尝试过使用GDB的bt,但这没有用。是否没有更全面的转储可供查看?我也使用过NSZombie,但我真的不明白如何使用它,所以如果这是你的答案,请提供一个文档链接,说明我应该如何从中获取相关数据。

以下是我的示例:我正在尝试使用Core Data。我的项目最初没有设置它,所以我不得不手动添加它,我通过转到我的项目>构建阶段>链接二进制与库>单击加号并添加CoreData.framework

然后我通过转到File> New> Data Model来创建我的数据模型。我创建了很多属性,就是这样

之后,我向app delegate添加了正确的方法(我通过使用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

1 个答案:

答案 0 :(得分:72)

当对象收到未实现的消息时,SIGABRT会上升。您的应用有多少警告?尝试浏览它们并找到警告你的“某些对象可能无法响应某些选择器”,如果你从所有这些中清除你的应用程序,你很可能会让它正常工作。

编辑:以下评论中的回答非常有用:

  好吧,这里有重炮 - 你试过使用断点吗?打开   项目资源管理器中的第六个选项卡,位于左下角   + - >添加例外断点 - >完成。这将添加一个异常处理程序,它将在崩溃的方法调用上停止您的应用程序   应用程序。

编辑:从xCode 5.0开始>您不再需要指定断点在创建断点时要捕获的异常。你只需要点击+ - >添加异常断点,你很好。

enter image description here