0

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

0x2c70bb:  popl   %ebp
0x2c670bc:  ret

我在日志中没有输出。当我运行僵尸或泄漏时,应用程序运行良好,但当我只使用模拟器时,我什么也得不到。我什至将断点放在应用程序委托的第一行代码中,但它没有命中它。

有小费吗?我什至在我的代码中回到了以前工作的代码,然后它发生了同样的事情。我已经开发 iOS 大约 2 年了,这是第一次。

我一直在寻找解决方案,但一无所获。

4

3 回答 3

0

如果您的应用程序委托没有命中,那么它将在您的 main.m 中的自动释放池语句中崩溃。

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

  • 确保您的主窗口和根 xib 都正常
  • 从您的应用程序委托中剥离除基础知识之外的所有内容

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

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

第四个参数是 delegateClassName,Apple Docs说:

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

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

于 2013-04-17T23:21:20.393 回答
0

您可以在 main 上执行此操作以捕获异常(支持文件: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并定期提交/推送;))

于 2013-04-18T01:09:07.737 回答
0

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

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

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

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

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

如果有人知道为什么会发生这种情况,请告诉我们...

于 2013-04-19T19:39:34.730 回答