我的iOS应用程序在启动时崩溃了

时间:2013-04-17 21:27:16

标签: ios logging crash

我一直在正常开发iOS应用程序然后突然启动调试器时我得到了一堆机器代码,它停在这里:

0x2c70bb:  popl   %ebp
0x2c670bc:  ret

我在日志中没有输出。当我运行僵尸或泄漏时,应用程序运行正常,但当我只是使用模拟器时我什么都没得到。我甚至将我的breakpointer放在应用程序委托中的第一行代码中,但它没有点击它。

任何提示?在发生这种情况之前,我甚至将我的代码返回到之前正在运行的代码中,它也做了同样的事情。我一直在开发iOS大约2年,这是第一次。

我已经搜索过一个解决方案,但什么都没找到。

3 个答案:

答案 0 :(得分:0)

如果您的app委托没有命中,那么它将在main.m的autorelease pool语句中崩溃。

没有完整的堆栈跟踪,很难调试。我推荐以下内容:

  • 确保您的主窗口和根xib都正常
  • 从您的应用代理
  • 剥离除了基础知识之外的所有内容

此外,在main.m文件中,您应该看到与此类似的内容:

UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

第四个参数是delegateClassName,Apple Docs表示:

  

delegateClassName
      从中实例化应用程序委托的类的名称。如果principalClassName指定UIApplication的子类,则可以将子类指定为委托;子类实例接收应用程序委托消息。如果从应用程序的主nib文件加载委托对象,请指定nil。

所以我会仔细检查您的委托类名是在应用程序主xib中还是在委托中设置的 - 我建议明确并添加它(如果它还没有)。

答案 1 :(得分:0)

您可以在主要上执行捕获异常(支持文件:main.m):

int main(int argc, char *argv[])
{
    int retVal = 0;
    @autoreleasepool {
        NSString *classString = NSStringFromClass([CDAppDelegate class]);
        @try {
            retVal = UIApplicationMain(argc, argv, nil, classString);
        }
        @catch (NSException *exception) {
            NSLog(@"Exception - %@",[exception description]);
            exit(EXIT_FAILURE);
        }
    }
    return retVal;
}

或/并且您可以尝试查看是否有要恢复的快照。 (但最好的做法是有一个 git repot 并定期提交/推送;)

答案 2 :(得分:0)

好的,这是最奇怪的事情。我想出了这个问题,但仍然不确定为什么会发生这种情况。

我有一个单例类,用于存储一些运行时设置信息.. 我有一个具有特定设置的类,我将其分配给主单例类。

在特定设置类中,我有大约15个属性。如果我添加15以上的属性,就会发生崩溃。如果我向类中添加第16个属性,应用程序在启动时崩溃,它甚至都不会到达main.m中的代码。

这很奇怪,我无法解释它。我只能假设这是一个内存问题,但严重的是,它只有15个属性。

1 int 12 NSStrings 2个NSMUtableArrays,每个只有几个记录

如果有人知道为什么会这样,请告诉我们......