如何追踪SIGABRT的原因

owe*_*rig 41 crash cocoa-touch objective-c sigabrt

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

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

这是我的例子:我正在尝试使用Core Data.我的项目最初并没有设置它,所以我不得不手动添加它,我通过转到我的项目> Build Phases> Link Binary with Libraries>点击加号并添加CoreData.framework

然后我通过转到文件>新建>数据模型创建了我的数据模型.我创建了很多属性,就是这样

之后,我向app委托添加了正确的方法(我通过使用Core Data创建一个新项目,然后复制方法来完成此操作):

//code removed, as its not needed for the question/answer
Run Code Online (Sandbox Code Playgroud)

在此之后,我只是尝试将值保存到托管对象(再一次,使用新项目从默认实现复制代码):

//code removed, as its not needed for the question/answer
Run Code Online (Sandbox Code Playgroud)

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

xcode错误

Eug*_*ene 72

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

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

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

编辑:从xCode 5.0开始>您不再需要指定断点在创建断点时要捕获的异常.你只需要点击+ - >添加异常断点就可以了.

在此输入图像描述