什么情况下会出现sigabrt崩溃,如何调试
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么情况下会出现sigabrt崩溃,如何调试相关的知识,希望对你有一定的参考价值。
参考技术A 我们需要做的第一件事就是:不要惊慌。修复崩溃不是很困难的。假如你崩溃了,并且胡乱的改些东西,而且还在不停的念着咒语希望bug神奇的自动消失,你大多数情况下都会使情况更麻烦。相反的,你需要知道一些系统的方法,并且学习怎么找到崩溃和他的原因。
第一件需要知道的就是在你的代码中准确的找到crash发生的地方:在那个文件,那一行。Xcode debugger将会帮助你,但是你需要懂得怎么样最好的使用它本回答被提问者采纳
sigabrt 没有错误信息
【中文标题】sigabrt 没有错误信息【英文标题】:sigabrt with no error message 【发布时间】:2011-10-17 08:12:18 【问题描述】:我有一个奇怪的问题,我在主循环中得到了一个 Sigabrt,但没有显示错误消息,我在互联网上查看了很多,但没有找到任何有用的东西。所以我的问题是,如何在没有错误消息的情况下跟踪导致 sigabrt 的原因?
提前致谢。
【问题讨论】:
你可以通过堆栈跟踪来猜测错误的位置 【参考方案1】:当您的程序崩溃时,您可以转到调试器控制台并输入bt
(回溯),这将使您了解崩溃时正在执行的代码。***项目可能不是您的代码,但如果您继续向下移动,您最终应该会在那里看到您的一些东西。
如果您的代码中没有任何调用,那么这些 SIGABRT 错误通常与您的 xib 文件有关,在 xib 文件中会丢失或重命名或以其他方式更改尚未反映在您的代码中的内容。
【讨论】:
谢谢你,这正是我一直在寻找的!帮了我很多,超级感谢!【参考方案2】:很长时间以来,我认为控制台没有给我 XCode 8 的任何信息,但后来我意识到我只是隐藏了控制台,需要再次显示它。
对于像我一样陷入奇怪的大脑扭曲的其他人:
按下那个按钮,看看 XCode 告诉你什么坏了,修复它
再次享受生活!
【讨论】:
在控制台过滤器中留下一些文本也会阻止控制台输出。【参考方案3】:你看过日志吗?
你试过在调试器中运行吗?它应该停止并在它发生时给你一个堆栈跟踪。还可以尝试在所有异常上设置断点。
【讨论】:
是的,我查看了日志,我以前从未遇到过这种情况,每次 sigabrt 都会给我一条错误消息和堆栈跟踪,但现在没有什么可以抓住的了。程序在主循环上停止,我不知道它是什么。 @Lukas: 以及调试器建议?【参考方案4】:对于 SIGABRT 错误,在调试中运行直到程序崩溃。然后,在迷你调试栏中的代码编辑器上方应该有一个带有黄色文本“GDB”的黑色小按钮。单击它,它将调出您的调试器控制台。这应该显示 sig-abort 报告,可能是一个警告,说明它是由未处理的抛出异常引起的,所有嵌套函数调用的堆栈跟踪,以及在此之上,一个或多个处理具体问题的消息。
我不知道实际的启动错误有什么问题,但很可能您更改了代码中某些由 xib 文件引用的类的名称,并且没有更改接口中的引用生成器。
只有在应用调用资源中缺少的内容时才会出现此错误。
例如,我有一个 (IBAction) 可以播放声音,但声音不再是应用程序的一部分。
检查代码中所有调用的资源,并确保它们仍在您的 xcode 项目中。甚至 Interface builder 中使用的图像也可以生成 SIGARBT。
这是一个烦人的错误,因为 9/10 次调试器并没有告诉你出了什么问题。
【讨论】:
【参考方案5】:在我的例子中,我没有正确处理异步调用和多线程,我得到了 SIGABRT
崩溃,没有任何消息。
在这种情况下很难调试,但一般提示是使用回调来处理您的一系列操作。不要同时运行太多动作,即使它们彼此无关。
【讨论】:
【参考方案6】:在我的情况下,问题是在视图被解雇后没有被删除的观察者。特别是 Google 地图中 @"myLocation" 上的观察者。
所以我在 viewDidLoad 上有这个:
[self.mapView addObserver:self
forKeyPath:@"myLocation"
options:NSKeyValueObservingOptionNew
context:NULL];
但我从未删除它,并且在关闭地图视图时我会经常崩溃我的应用程序。
我添加了这个:
-(void)dealloc
[self.mapView removeObserver:self forKeyPath:@"myLocation"];
问题解决了。
【讨论】:
以上是关于什么情况下会出现sigabrt崩溃,如何调试的主要内容,如果未能解决你的问题,请参考以下文章
带有信号 6 (SIGABRT) 的 RenderThread 的本机崩溃
为啥 PyQt 在没有信息的情况下会崩溃? (退出代码 0xC0000409)