如何最好地调试objc_msgSend中的崩溃?

fbr*_*eto 11 crash debugging cocoa objective-c

NSAutoreleasePool排水时我发生了撞车事故.据推测,池正在尝试释放由另一段代码过早释放的对象.我遇到的崩溃objc_msgSend正在尝试向不再存在的对象发送消息.

鉴于堆栈状态,我可以使用哪些提示/技巧/流程/ gdb命令来获取有关对象的信息和/或非法释放发生的位置?

Tee*_*ppa 16

如果您预感到它是过早删除,请启用僵尸确认您的假设,然后调试正在进行的操作.启用僵尸时,对象不会被真正破坏,而是设置为僵尸状态,这有助于您在调用dealloc后检测它们何时被访问.从NSZombieEnabled了解更多信息

  • 此外,您可以使用Instruments的Object Alloc仪器来跟踪过早释放的对象的保留/释放事件.这不是自动释放池的释放问题,而是一些事先发布,通常. (3认同)