应用程序仅在使用(lldb)时崩溃?

问题描述 投票:0回答:4

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

我的应用程序唯一指向的是一行,如下所示:

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

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

提前致谢!

Edit:我认为这是因为我在执行 unscheduleAllSelectors 和 stopAnimation 之后在 Cocos2D 的 CCDirector 上调用暂停。如果我不调用这 2 个,那么就不会出现 lldb 崩溃。

ios crash instruments lldb
4个回答
2
投票

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

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

main()
中的最后一行。

但是,需要注意的重要一点是,您必须在应用程序进入后台之前结束所有 GPU 活动。执行此操作的一个好地方是在 UIApplicationWillResignActiveNotification

 的通知处理程序中或在类似名称的应用程序委托回调中。


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


0
投票
事实证明,这是我与 Cocos2D 有关的问题的实际修复:

http://www.cocos2d-iphone.org/forum/topic/7326


0
投票
在 Mac 上,我遇到了类似的问题。我的应用程序在

lldb

 下运行良好,但从外部运行时崩溃了。问题出在代码签名上。如果二进制文件或库签名不正确,从命令行运行时可能会失败,但在 
lldb
 下运行时会成功。

© www.soinside.com 2019 - 2024. All rights reserved.