我有一个奇怪的问题,我在主循环中得到一个Sigabrt,但没有显示错误信息,我在互联网上看了很多,但没有找到任何有用的东西。所以我的问题是,如何跟踪导致sigabrt没有错误消息的原因?
提前致谢。
答案 0 :(得分:14)
当程序崩溃时,您可以转到调试器控制台并键入bt
(回溯),这将使您了解崩溃时正在执行的代码。顶级项目可能不是您的代码,但如果您继续向下移动,您最终应该会在那里看到您的某些内容。
如果您的代码没有任何调用,那么这些SIGABRT错误通常与您的xib文件有关,在xib文件中会丢失或重命名或以其他方式更改,但这些错误未在您的代码中反映出来。
答案 1 :(得分:2)
你看过日志了吗?
你试过在调试器中运行吗?它应该停止并给它一个堆栈跟踪。同时尝试在所有例外情况下设置断点。
答案 2 :(得分:2)
对于SIGABRT错误,请在调试中运行,直到程序崩溃。然后,在迷你调试栏中的代码编辑器上方应该有一个带有黄色文本“GDB”的小黑色按钮。单击它,它将调出您的调试器控制台。这应该显示sig-abort报告,可能是一个警告声明它是由未处理的抛出异常,所有嵌套函数调用的堆栈跟踪以及上面的一个或多个消息处理特定错误的原因引起的。
我不知道实际启动错误有什么问题,但很可能你改变了xib文件引用的代码中某些类的名称,并且没有更改接口中的引用助洗剂。
只有在应用程序调用资源中缺少的内容时才会出现此错误。
例如我有一个(IBAction)播放声音,但声音不再是应用程序的一部分。
检查代码中的所有被调用资源,确保它们仍在您的xcode项目中。甚至“界面”构建器中使用的图像也可以生成SIGARBT。
这是一个恼人的错误,因为调试器的9/10倍没有告诉你什么是错的。
答案 3 :(得分:2)
太久了,我以为控制台没有给我XCode 8的信息但后来我意识到我刚刚隐藏了控制台并需要再次显示它。
对于像我一样陷入奇怪的大脑扭曲的其他人:
按下该按钮,看看XCode告诉你什么坏了,修好了
再次享受生活!
答案 4 :(得分:0)
在我的情况下,我没有正确处理异步调用和多线程,并且在没有任何消息的情况下发生SIGABRT
崩溃。
在这种情况下调试真的很难,但一般的提示是使用回调来处理你的一系列操作。即使他们彼此无关,也不要同时进行太多的行动。
答案 5 :(得分:-1)
在我的情况下,问题是观察者在视图被解雇后没有被删除。特别是谷歌地图中@“myLocation”的观察者。
所以我在viewDidLoad上有这个:
[self.mapView addObserver:self
forKeyPath:@"myLocation"
options:NSKeyValueObservingOptionNew
context:NULL];
但是我从来没有删除它,并且在解雇地图视图时我会经常崩溃我的应用程序。
我补充说:
-(void)dealloc{
[self.mapView removeObserver:self forKeyPath:@"myLocation"];
}
问题解决了。