exc_bad_access的定位方法

     网上有一些关于这个问题的解决办法,但是多数说得不清楚,我结合自己的实践,描述一下具体的步骤。

1.

    在xcode的Groups & Files / Executables文件夹中,双击,选择Arguments,选择下面一栏,点“+”号,添加四个变量,名字分别为:NSZombieEnabled、MallocStackLogging、NSDebugEnabled、MallocStackLoggingNoCompact,value都填YES。

2.

    运行程序如果出现exc_bad_access,控制台提示信息会显示类似如下的信息:

2011-12-14 13:44:18.300 AProject[4009:207] *** -[CFString class]: message sent to deallocated instance 0x5e463b0

   这时,在控制台输入shell malloc_history 4009 0x5e463b0。这里的4009就是上面的提示信息里的4009,表示进程号,0x5e463b0就是上面的0x5e463b0,表示出错的变量地址。

   按回车,控制台会输出一些信息,有些是以 ALLOC或FREE开头的,这些是内存请求或释放的记录,包含发送给这些对象的消息。出错一般在最后一个这样的信息,以ALLOC或MALLOC开头,找到最后一个属于自己写的消息,问题就是这个消息了。这样就可以定位到哪一行代码出错了。

   主要参考文章:http://blog.sina.com.cn/s/blog_6cffce770100ub98.html

by zqzhuang

posted @ 2011-12-14 13:54  iPhone Dev  阅读(546)  评论(0编辑  收藏  举报