Xcode 5.1.1线程1:信号SIGABRT

时间:2014-06-22 08:50:06

标签: iphone xcode

当我运行我的应用程序时,一段时间后它停止工作并说出主题1:信号SIGABRT。它在这段代码上说:

#import <UIKit/UIKit.h>

int main(int argc, char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;
}

它在这一行上说:

int retVal = UIApplicationMain(argc, argv, nil, nil);

2 个答案:

答案 0 :(得分:3)

SIGABRT表示触发了异常。控制台日志将打印确切的异常消息,您需要查看它(在此处发布)。

问题可能出在您的UIApplicationMain方法

答案 1 :(得分:0)

要在user3109992上展开回答,SIGABRT通常表示抛出了异常。通常,您希望启用全局异常断点,以便在生成异常的代码行上停止您的程序,而不是仅仅在main上崩溃,以便您可以获得有关发生的事情的一些有意义的信息。

要设置全局断点,请使用左侧栏(或命令7)上的断点导航器(看起来像菱形)。在左下角单击+图标,然后选择“异常断点”。现在,您的程序将在抛出异常时崩溃。但是,这仍然不会将实际的异常打印到控制台。

要在发生崩溃时将异常打印到控制台,请选择类似“objc exception throw”之类的堆栈框架,它将位于左侧窗口的顶部。如果您在模拟器上运行类型:po $ eax,一般情况下异常将打印到控制台。请注意,如果您在设备或64位模拟器上,有时异常所在的寄存器是不同的,因此您可以键入:“register read”,它将为您提供寄存器列表。顶部的那个保存异常,因此您可以键入:“po”来查看它。当您的程序在主程序崩溃时,您可以通过在方案(产品 - &gt;方案 - &gt;编辑方案)中设置“日志例外”来自动打印例外,通过选择编辑方案窗口中的诊断选项卡进行访问。但是,如果设置了断点,那么断点将在调试器获得机会之前停止程序。我更喜欢断点方法,因为我通常想要了解更多关于应用程序崩溃时发生的事情。

我建议你回过头看看过去几代WWDC的一些调试和LLDB视频,因为听起来你没有很多调试器的经验。最初的视频有很多有用的信息。