我有一个奇怪的问题,我在主循环中得到一个Sigabrt,但没有显示错误信息,我在网上查了很多这个,但没有设法找到任何东西有用。所以我的问题是,如何跟踪什么导致sigabrt没有错误信息?sigabrt没有错误信息
在此先感谢。
我有一个奇怪的问题,我在主循环中得到一个Sigabrt,但没有显示错误信息,我在网上查了很多这个,但没有设法找到任何东西有用。所以我的问题是,如何跟踪什么导致sigabrt没有错误信息?sigabrt没有错误信息
在此先感谢。
当程序崩溃时,您可以转到调试器控制台并输入bt
(backtrace),这会让您知道在崩溃时正在执行的代码。顶级项目可能不是你的代码,但如果你继续向下移动,你最终应该看到你的东西。
如果您的代码中没有任何调用,那么这些SIGABRT错误通常与您的xib文件相关,在代码中未反映的xib文件中将会丢失或重命名或者更改某些内容。
谢谢你,那是我一直在寻找的!帮助了我很多,超级,谢谢! – Lukas
对于SIGABRT错误,请在调试中运行,直到程序崩溃。然后,应该在你的代码编辑器上面有一个黑色的小按钮,文字“GDB”以黄色显示在你的小型调试栏中。点击它,它会调出您的调试器控制台。这应该显示sig-abort报告,可能是一个警告,声明它是由未处理的抛出的异常,所有嵌套函数调用的堆栈跟踪引起的,还有一条或多条消息处理具体出错的消息。
我不知道实际的启动错误有什么问题,但它可能很有可能是您更改了代码中由您的xib文件引用的某个类的名称,并且没有更改引用界面生成器。
只有当应用程序调用资源中缺少的某些内容时才会发生此错误。
例如,我有一个(IBAction)播放声音,但声音不再是应用程序的一部分。
检查您的代码中的所有调用资源,并确保它们仍在您的xcode项目中。即使在“界面”构建器中使用的图像也可以生成SIGARBT。
这是一个令人讨厌的错误,因为9/10次调试器没有告诉你什么是错的。
在我的情况下,我没有正确处理异步调用和多线程,并且我得到了一个没有任何消息的SIGABRT
崩溃。
在这种情况下真的很难调试,但一般的提示是使用回调来处理你的一系列操作。不要在同一时间执行太多动作,即使它们彼此不相关。
在我的情况下,问题是观察者在视图被解雇后没有被删除。具体来说就是Google地图中@“myLocation”的观察者。
所以我有这个在viewDidLoad中:
[self.mapView addObserver:self
forKeyPath:@"myLocation"
options:NSKeyValueObservingOptionNew
context:NULL];
但我从来没有移除和解聘地图视图的时候我会不断地崩溃我的应用程序。
我加了这一点:
-(void)dealloc{
[self.mapView removeObserver:self forKeyPath:@"myLocation"];
}
而问题就迎刃而解了。
你可以猜测错误的位置在堆栈轨迹上 – Giuseppe