2011-10-17 181 views
4

我有一个奇怪的问题,我在主循环中得到一个Sigabrt,但没有显示错误信息,我在网上查了很多这个,但没有设法找到任何东西有用。所以我的问题是,如何跟踪什么导致sigabrt没有错误信息?sigabrt没有错误信息

在此先感谢。

+0

你可以猜测错误的位置在堆栈轨迹上 – Giuseppe

回答

12

当程序崩溃时,您可以转到调试器控制台并输入bt(backtrace),这会让您知道在崩溃时正在执行的代码。顶级项目可能不是你的代码,但如果你继续向下移动,你最终应该看到你的东西。

如果您的代码中没有任何调用,那么这些SIGABRT错误通常与您的xib文件相关,在代码中未反映的xib文件中将会丢失或重命名或者更改某些内容。

+0

谢谢你,那是我一直在寻找的!帮助了我很多,超级,谢谢! – Lukas

2

你看过日志吗?

您是否尝试过在调试器中运行?它应该停下来,并给它一个堆栈跟踪。也可以尝试在所有例外情况下设置一个断点。

+0

是的,我查看了日志,我从来没有遇到过这个,每次sigabrt给了我一个错误消息和堆栈跟踪,但现在没有什么可以抓住的了。程序停在主循环,我不知道它是什么。 – Lukas

+0

@Lukas:和调试器的建议? – JeremyP

2

对于SIGABRT错误,请在调试中运行,直到程序崩溃。然后,应该在你的代码编辑器上面有一个黑色的小按钮,文字“GDB”以黄色显示在你的小型调试栏中。点击它,它会调出您的调试器控制台。这应该显示sig-abort报告,可能是一个警告,声明它是由未处理的抛出的异常,所有嵌套函数调用的堆栈跟踪引起的,还有一条或多条消息处理具体出错的消息。

我不知道实际的启动错误有什么问题,但它可能很有可能是您更改了代码中由您的xib文件引用的某个类的名称,并且没有更改引用界面生成器。

只有当应用程序调用资源中缺少的某些内容时才会发生此错误。

例如,我有一个(IBAction)播放声音,但声音不再是应用程序的一部分。

检查您的代码中的所有调用资源,并确保它们仍在您的xcode项目中。即使在“界面”构建器中使用的图像也可以生成SIGARBT。

这是一个令人讨厌的错误,因为9/10次调试器没有告诉你什么是错的。

0

在我的情况下,我没有正确处理异步调用和多线程,并且我得到了一个没有任何消息的SIGABRT崩溃。

在这种情况下真的很难调试,但一般的提示是使用回调来处理你的一系列操作。不要在同一时间执行太多动作,即使它们彼此不相关。

1

太长了,我以为控制台给了我XCode 8没有任何信息,但后来我意识到我只是隐藏了控制台,需要再次显示它。

enter image description here

对于其他人被困在一个怪异的脑经,好像我是:

  1. 按下该按钮,看看Xcode是告诉你坏,修复它

  2. 享受再次生活!

+0

在控制台过滤器中留下一些文本也会阻止控制台输出。 –

0

在我的情况下,问题是观察者在视图被解雇后没有被删除。具体来说就是Google地图中@“myLocation”的观察者。

所以我有这个在viewDidLoad中:

[self.mapView addObserver:self 
       forKeyPath:@"myLocation" 
        options:NSKeyValueObservingOptionNew 
        context:NULL]; 

但我从来没有移除和解聘地图视图的时候我会不断地崩溃我的应用程序。

我加了这一点:

-(void)dealloc{ 
    [self.mapView removeObserver:self forKeyPath:@"myLocation"]; 
} 

而问题就迎刃而解了。