为什么程序会暂停而不会在没有设置断点时崩溃?

时间:2012-02-18 02:18:37

标签: objective-c ios xcode

我有一个只是暂停的项目,并且不会崩溃。它暂停在这一组的最后一行:

 NSLog(@"%@", nibOptions);
 NSLog(@"%@", self.nibName);
 NSLog(@"%@", self.nibBundle);

 [self.nibBundle loadNibNamed:self.nibName owner:self options:nibOptions];

暂停前的NSLog看起来完全合理。我认为一切都正确连接。但显然有些不对劲。有关排除暂停的任何建议没有提供任何信息?没有设置断点。谢谢。 (Xcode 4.2)

编辑:我添加应用程序来到前面,然后移动到Xcode窗口后面。 nib / view无法加载。

编辑:这是崩溃日志(暂停后继续):

#0  0x90160332 in __kill ()
#1  0x9015f932 in kill$UNIX2003 ()
#2  0x013e136b in CFHash ()
#3  0x01493c04 in __CFDictionaryStandardHashKey ()
#4  0x013e9114 in CFBasicHashFindBucket ()
#5  0x013e8ad5 in CFDictionaryGetValue ()
#6  0x00588ba4 in +[UIProxyObject mappedObjectForCoder:withIdentifier:] ()
#7  0x00588c9d in -[UIProxyObject initWithCoder:] ()
#8  0x00687fa2 in UINibDecoderDecodeObjectForValue ()
#9  0x006876b7 in -[UINibDecoder decodeObjectForKey:] ()
#10 0x00588ead in -[UIRuntimeConnection initWithCoder:] ()
#11 0x00589629 in -[UIRuntimeEventConnection initWithCoder:] ()
#12 0x00687fa2 in UINibDecoderDecodeObjectForValue ()
#13 0x006879af in UINibDecoderDecodeObjectForValue ()
#14 0x006876b7 in -[UINibDecoder decodeObjectForKey:] ()
#15 0x00588305 in -[UINib instantiateWithOwner:options:] ()
#16 0x0058a010 in -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] ()
#17 0x00002fc5 in -[P3ViewController loadView] at /Users/bryanhanson/Desktop/NastyMarty/P3/Classes/P3ViewController.m:158
#18 0x004305cb in -[UIViewController view] ()
#19 0x00390a73 in -[UIWindow addRootViewControllerViewIfPossible] ()
#20 0x00390ce2 in -[UIWindow _setHidden:forced:] ()
#21 0x00390ea8 in -[UIWindow _orderFrontWithoutMakingKey] ()
#22 0x00397d9a in -[UIWindow makeKeyAndVisible] ()
#23 0x0000297e in -[P3AppDelegate application:didFinishLaunchingWithOptions:] ()
#24 0x003689d6 in -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] ()
#25 0x003698a6 in -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] ()
#26 0x00378743 in -[UIApplication handleEvent:withNewEvent:] ()
#27 0x003791f8 in -[UIApplication sendEvent:] ()
#28 0x0036caa9 in _UIApplicationHandleEvent ()
#29 0x01bc7fa9 in PurpleEventCallback ()
#30 0x014a51c5 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ ()
#31 0x0140a022 in __CFRunLoopDoSource1 ()
#32 0x0140890a in __CFRunLoopRun ()
#33 0x01407db4 in CFRunLoopRunSpecific ()
#34 0x01407ccb in CFRunLoopRunInMode ()
#35 0x003692a7 in -[UIApplication _run] ()
#36 0x0036aa9b in UIApplicationMain ()
#37 0x00002458 in main ()

4 个答案:

答案 0 :(得分:2)

窗口移动到Xcode后面,因为当你的应用程序暂停/崩溃时它会获得焦点。并且视图没有加载,因为您刚刚调用了loadnib或者还没有(取决于应用程序暂停的行)。

现在,正如您所说,如果您继续运行它,您的应用程序就会死亡,那么它就是崩溃而不是暂停。

尝试验证笔尖名称和选项是否正确,以及xib文件实际存在并与应用程序捆绑在一起。

修改

在接受的答案here中尝试解决方案。

  

它在NibDecoder中崩溃,即在加载XIB文件时崩溃。您可能在那里引用了一个不存在或未初始化的对象或属性。

OP的结论:

  

我在自定义控制器对象中从头开始重新构建了所有内容,并且我绕过了上次杀​​了我的内容。我制作的每一个变化都是我编译并在iPhone中运行的,以确保我没有绊倒自己。我认为我与Controller对象的连接必定是错误的,而我正在做其他事情。因此,在学习IB布局时,经验教训是编译和测试很多......不仅仅是在使用Xcode时!

所以,试着像他一样:验证xib文件中的连接,或者如果可能的话,再次启动它并逐步添加东西以查看导致崩溃的原因。

答案 1 :(得分:0)

这不是一个停顿,当你NSLog错误的类型时,这是一个看起来像暂停的崩溃。其中一个NSLog不是对象,不能用“%@”显示。

答案 2 :(得分:0)

点击暂停,然后看一下你的主题。我打赌你在某个地方有一个循环包含。它看起来像这样:

1 -[MyClass2 init]
2 -[MyClass1 init]
3 -[MyClass3 init]
4 -[MyClass2 init]
5 -[MyClass1 init]
6 -[MyClass3 init]
7 -[MyClass2 init]
8 -[MyClass1 init]
9 -[ApplicationDelegate appFinishedLaunching]
10 UIApplicationMain

最终会崩溃。但直到它确实如此,它看起来似乎正在等待某事。检查一下MyClass1 #imports MyClass2的哪些内容#imports MyClass3 #imports MyClass1重新出现。

答案 3 :(得分:0)

这是雪豹吗?有一个错误,如果运行时崩溃并向您发送解释原因的消息,则不会在控制台中收到消息。例如,您的笔尖可能有问题,因此笔尖加载失败。但是你永远不会得到控制台消息解释原因。

编辑:最好的解决方案是安装Lion并在Lion上运行它;这个bug不会发生在那里。另一种可能性(这就是我所做的)是在[NSException raise]上设置一个全局异常并设置断点。发生崩溃时,您将暂停在该全局断点处,然后在控制台中键入po $eax,您将从运行时获取消息 - 如果您很幸运。