我有一个混合了 Cocos2D 和一些 UIKit 的应用程序。我最近一直在实现一些新功能,所以内存管理可能是错误的,或者某些东西被过度释放,但每当我通过单击主页按钮退出应用程序时,控制台就会出现仅因消息(lldb)而崩溃。即使我打开 NSZombiesEnabled 也不会发生任何不同的情况。
我的应用程序唯一指向的是一行,如下所示:
libGPUSupportMercury.dylib`gpus_ReturnNotPermittedKillClient:
0x38101094: trap
0x38101096: nop
我不知道这意味着什么,但我很想解决这个问题。有谁知道为什么会发生这种情况?
提前致谢!
Edit:我认为这是因为我在执行 unscheduleAllSelectors 和 stopAnimation 之后在 Cocos2D 的 CCDirector 上调用暂停。如果我不调用这 2 个,那么就不会出现 lldb 崩溃。
您的应用程序因违反异常而被终止。几乎可以肯定,您在应用程序转移到后台后正在使用 GPU,这是严格非法的,并且会导致系统向您的应用程序发送终止信号。
当应用程序在调试器中运行并且它被外部信号(例如终止信号)而不是调试器可以处理的东西(例如马赫异常)杀死时,调试器只会向您提供它知道并捕获的任何信息程序入口点(这通常会导致调试器看起来像是停在
main()
中的最后一行。
但是,需要注意的重要一点是,您必须在应用程序进入后台之前结束所有 GPU 活动。执行此操作的一个好地方是在 UIApplicationWillResignActiveNotification
的通知处理程序中或在类似名称的应用程序委托回调中。
lldb
下运行良好,但从外部运行时崩溃了。问题出在代码签名上。如果二进制文件或库签名不正确,从命令行运行时可能会失败,但在
lldb
下运行时会成功。