我一直在正常开发iOS应用程序然后突然启动调试器时我得到了一堆机器代码,它停在这里:
0x2c70bb: popl %ebp
0x2c670bc: ret
我在日志中没有输出。当我运行僵尸或泄漏时,应用程序运行正常,但当我只是使用模拟器时我什么都没得到。我甚至将我的breakpointer放在应用程序委托中的第一行代码中,但它没有点击它。
任何提示?在发生这种情况之前,我甚至将我的代码返回到之前正在运行的代码中,它也做了同样的事情。我一直在开发iOS大约2年,这是第一次。
我已经搜索过一个解决方案,但什么都没找到。
答案 0 :(得分:0)
如果您的app委托没有命中,那么它将在main.m的autorelease pool语句中崩溃。
没有完整的堆栈跟踪,很难调试。我推荐以下内容:
此外,在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,每个只有几个记录
如果有人知道为什么会这样,请告诉我们......