浏览 14910 次
锁定老帖子 主题:如何调试EXC_BAD_ACCESS
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-12-17
最后修改:2009-12-22
当程序出现“EXC_BAD_ACCESS”时,就像不解风情的妻子对你说:“亲爱的,今晚不行”。这两种情况都是非常不幸的。 让我们先看看EXC_BAD_ACCESS到底是什么。 向已经释放的对象发送消息时会出现EXC_BAD_ACCESS。当出现错误时,通常会调用堆栈信息,特别是在多线程的情况下。 怎样提供一个dummy,当释放一个对象导致程序终止时,在堆栈上告诉我们错误信息,好,下面我们将告诉你怎么去做。 如果你设置了NSZombiEnabled环境变量,当销毁一个对象时,objective的运行时环境会在这个对象后边设置一个dummy,当调用这个对象的方法时,程序会终止,并在堆栈上显示错误信息,下边教你怎么设置NSZombiEnabled 首先,在Xcode中打开executables 查看其中内容的信息。 然后,打开信息面板中的Arguments面板 点击左下角的加号,添加变量NSZombiEnabled,并将变量的值设置为YES。 重新运行程序,当过度释放对象时,会在控制台上出现如下信息: 2009-03-30 02:30:36.172 ninjaJumper[3997:20b] *** -[GameLayer retain]: message sent to deallocated instance 0x59bf670 说明想GameLayer的一个对象发送了retain消息 查看堆栈信息: 如何查看:http://lovebirdegg.iteye.com/blog/550489 当问题解决后,要将NSZombieEnabled设置为无效,不需要删除变量,将变量前的对号去掉就可以了: 第一次翻译,很烂... 多谢大家指正 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-12-18
不错!
BAD_ACCESS 是个很头大的问题,回头试试这个解决方式看看. |
|
返回顶楼 | |
发表时间:2009-12-20
多谢! EXC_BAD_ACCESS一般都是内存指针问题, debug还是比较头疼的
|
|
返回顶楼 | |
发表时间:2009-12-23
lordhong 写道 多谢! EXC_BAD_ACCESS一般都是内存指针问题, debug还是比较头疼的 虽然翻译了,但有的地方还不是很理解,那个“dummy”指的是什么? |
|
返回顶楼 | |
发表时间:2009-12-24
dummy就是傻x逼的意思, 就和测试汽车抗撞击里坐的假人是一个道理
|
|
返回顶楼 | |