应用程序仅与(lldb)崩溃?

问题描述:

我有一个与Cocos2D和一些UIKit混合在一起的应用程序。我最近一直在实现一些新功能,所以也许内存管理是错误的或者是有些过度发布,但是当我通过单击主页按钮退出应用程序时,控制台只是与消息(lldb)一起崩溃。即使我打开NSZombiesEnabled也没有什么不同。应用程序仅与(lldb)崩溃?

的唯一的事我的应用点是一条线,看起来像这样:

libGPUSupportMercury.dylib`gpus_ReturnNotPermittedKillClient: 
0x38101094: trap 
0x38101096: nop 

我不知道那是什么意思,但我很乐意此问题得到解决。有谁知道为什么会发生这种情况?

在此先感谢!

编辑:我认为这种情况的原因是因为我呼吁暂停上的Cocos2D的CCDirector后我做unscheduleAllSelectors和stopAnimation。如果我不打电话给那两个,那么就不会有死机。

原来,这是我与Cocos2D有关的问题的实际解决方案:http://www.cocos2d-iphone.org/forum/topic/7326

这可能意味着你仍然试图渲染OpenGL中的东西(通过Cocos2D),这是在应用程序处于后台时不允许的。

+0

然后我恢复applicationDidBecomeActive中的OpenGL项目吧?目前,虽然我在applicationDidEnterBackground或applicationWillEnterForeground中没有任何内容,但它仍然与(lldb)一起崩溃。 –

你的应用程序正在被杀,因为它违反了例外。几乎可以肯定的是,当您的应用程序转移到后台后,您正在使用GPU,这是非法的,并会导致系统向您的应用程序发送终止信号。

当一个应用程序在调试器中运行并且它被外部信号(比如kill信号)杀死而不是调试器可以处理的东西(比如mach例外)时,调试器只会给你任何它知道的信息并在程序入口点陷阱(这通常导致调试器看起来像它在main()停在最后一行。

要注意的重要的事情,然而,就是你必须之前结束的任何及所有GPU活动你的应用程序进入后台,一个好的地方是在UIApplicationWillResignActiveNotification的通知处理程序或类似命名的应用程序代理回调。

+0

然后我恢复applicationDidBecomeActive的OpenGL项目?目前,虽然我在applicationDidEnterBackground或applicationWillEnterForeground中没有任何内容,但它仍然与(lldb)一起崩溃。 –

+0

@iBradApps是的,你需要暂停辞职活动,恢复活跃。您肯定会访问GPU(或者Cocos2D代表您正在执行的任务仍在访问GPU)。在从通知处理程序或委托方法返回之前,您需要确保所有访问都已完全停止。 –

+0

好的,谢谢! –