我一直遇到一些导致我的游戏崩溃的错误问题。首先它只是给了我一个“BAD_ACCESS”,但是通过启用 Zombie 对象,调试器这样说:
-[CCSprite setPosition:]:消息发送到释放的实例 xxxx
当对象 A 和 B 发生碰撞时会发生崩溃,但前提是碰撞发生在对象 B 创建的同一时刻。
A 和 B 都应该在碰撞时被破坏,除了上述情况外,这工作得很好。我正在使用 Box2D 物有所值。
有没有办法以更具体的方式跟踪错误?就像是A还是B给我带来了麻烦。
我一直遇到一些导致我的游戏崩溃的错误问题。首先它只是给了我一个“BAD_ACCESS”,但是通过启用 Zombie 对象,调试器这样说:
-[CCSprite setPosition:]:消息发送到释放的实例 xxxx
当对象 A 和 B 发生碰撞时会发生崩溃,但前提是碰撞发生在对象 B 创建的同一时刻。
A 和 B 都应该在碰撞时被破坏,除了上述情况外,这工作得很好。我正在使用 Box2D 物有所值。
有没有办法以更具体的方式跟踪错误?就像是A还是B给我带来了麻烦。
如果您使用的是模拟器,请启用 MallocStackLogging 和 NSDebugEnabled。然后,当您收到此消息时,请记下违规对象的进程 ID 和内存地址。然后在您的终端中,使用malloc_history <pid> <memory_address>
查看此地址的分配和解除分配的历史记录。它将为您提供每个 alloc 和 dealloc 的堆栈跟踪。最近的alloc 可能是您分配了一些您可能没有保留的地方,或者最近的dealloc 是您不小心将其dealloc 的地方。
以下是 malloc_history 的手册页: