【问题标题】:App crashes only with (lldb)?应用程序仅与(lldb)崩溃?
【发布时间】:2012-08-28 18:09:57
【问题描述】:

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

我的应用所指向的唯一内容是如下所示的一行:

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

我不知道这意味着什么,但我很想解决这个问题。有谁知道为什么会这样?

提前致谢!

编辑:我认为这是因为我在执行 unscheduleAllSelectors 和 stopAnimation 之后在 Cocos2D 的 CCDirector 上调用了暂停。如果我不调用那些 2,那么就没有 lldb 崩溃。

【问题讨论】:

    标签: ios crash instruments lldb


    【解决方案1】:

    您的应用因违反异常而被终止。几乎可以肯定的是,您在将应用转移到后台后使用 GPU,这是非常非法的,并且会导致系统向您的应用发送终止信号。

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

    然而,需要注意的重要一点是,您必须在应用程序进入后台之前结束所有 GPU 活动。这样做的好地方是在UIApplicationWillResignActiveNotification 的通知处理程序中或在类似名称的应用程序委托回调中。

    【讨论】:

    • 那我恢复applicationDidBecomeActive中的OpenGL项目对吧?但目前,我在 applicationDidEnterBackground 或 applicationWillEnterForeground 中没有任何内容,它仍然与(lldb)崩溃。
    • @iBradApps 是的,您需要在辞职活动中暂停,而恢复活动确实变得活跃。你肯定在访问 GPU(或者 Cocos2D 代表你做的事情仍在访问 GPU)。您需要确保在从通知处理程序或委托方法返回之前完全停止所有访问。
    【解决方案2】:

    这可能意味着您仍在尝试在 OpenGL 中(通过 Cocos2D)渲染内容,这在应用程序处于后台时是不允许的。

    【讨论】:

    • 那我恢复applicationDidBecomeActive中的OpenGL项目对吧?但目前,我在 applicationDidEnterBackground 或 applicationWillEnterForeground 中没有任何内容,它仍然与(lldb)崩溃。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2015-09-21
      • 1970-01-01
      • 2018-04-05
      • 2013-12-18
      • 1970-01-01
      • 2012-03-18
      • 2014-07-11
      • 2017-06-17
      • 1970-01-01
      相关资源
      最近更新 更多