sigabrt没有错误信息
我有一个奇怪的问题,我在主循环中得到一个Sigabrt,但没有显示错误消息,我在网上看了很多,但没有find任何有用的东西。 所以我的问题是,如何跟踪是什么导致sigabrt没有错误信息?
提前致谢。
当你的程序崩溃时,你可以进入debugging器控制台并inputbt
(backtrace),这会让你知道在崩溃时执行了什么代码。 顶级项目可能不是你的代码,但如果你继续向下移动,你最终应该看到你的东西。
如果你的代码中没有任何调用,那么这些SIGABRT错误通常与你的xib文件相关,在你的代码中没有反映出来的xib文件中将会丢失或者重命名或者改变。
你看过日志吗?
你有没有试过在debugging器中运行? 它应该停止,并给你一个堆栈跟踪时。 还可以尝试在所有例外情况下设置一个断点。
对于SIGABRT错误,运行debugging,直到程序崩溃。 然后,应该在你的代码编辑器上面有一个小小的黑色button,文字“GDB”在黄色上方,在你的小型debugging栏中。 点击它,它会调出你的debugging器控制台。 这应该显示sig-abort报告,可能是一个警告,声明它是由一个未处理的抛出的exception,所有嵌套的函数调用的堆栈跟踪,以及一个或多个消息处理具体出错的消息引起的。
我不知道实际的启动错误是怎么回事,但是很可能你改变了你的代码中被你的xib文件引用的一些类的名字,并且没有改变Interface Builder中的引用。
只有当应用程序正在调用资源缺less的东西时才会出现此错误。
例如我有一个(IBAction)播放声音,但声音不再是应用程序的一部分。
检查你的代码中的所有被调用的资源,并确保它们仍然在你的xcode项目中。 即使在“界面”构build器中使用的图像也可以生成SIGARBT。
这是一个令人讨厌的错误,因为9/10次debugging器不会告诉你什么是错的。
太长时间了,我以为控制台给了我XCode 8没有任何信息,但后来我意识到我已经隐藏了控制台,需要再次显示。
对于像我这样被困在一个奇怪的大脑变形中的人来说:
-
按下该button,看看XCode告诉你什么坏了,修复它
-
再次享受生活!
在我的情况下,我没有正确处理asynchronous调用和multithreading,我没有任何消息得到SIGABRT
崩溃。
在这种情况下真的很难debugging,但是一般的提示是使用callback来处理你的一系列操作。 不要同时做太多的动作,即使它们互不相关。