解决LLDB模式下出现message sent to deallocated instance错误

来源:互联网 发布:u盘安装mac os x lion 编辑:程序博客网 时间:2024/06/04 08:22

本文在源文的基础上做整理:http://www.devdiv.com/home.php?mod=space&uid=50901&do=blog&id=50856

 

Xcode版本7.1  IOS版本9.1

公司之前开发的一个APP,在使用环境中IOS版本升级到9.0以后,某个操作会导致程序闪退。

Xcode代码中提示错误:

1
Thread 1: Program received signal:"EXC_BAD_ACCESS"

这样的提示意味着对已经释放的对象发送消息,或者对不能release的对象调用release。

默认情况下Xcode并不能准确定位到具体哪行代码引起的问题。

 

我们先对开发环境进行设置

先打开Debug的Console View界面,让Xcode在调试的时候输出更多的信息:菜单XCode > Preferences

 

再对环境变量进行设置:菜单Product > Scheme > Edit Scheme

 

设置好后调试程序,在输出界面发现了message sent to deallocated instance错误日志

 

在Xcode的以前版本中,我们可以在Xcode的Console View中使用info malloc-history 0x6d564f0来查看调用堆栈来查看崩溃发生的地方。

在新的Xcode中,调试器默认使用的LLDB,那么怎么在LLDB状态下定位由于内存操作不当引起的Crash呢?

 

打开“活动监视器”,在进程列表中找到测试APP对应的进程号PID(Xcode启用调试后会在进程列表中找到对应APP的进程)

 

现在我们得到两个主要的信息:

APP进程ID:1087

崩溃地址:0x7f7f7523ff10

 

打开“终端”,输入以下命令:

sudo malloc_history 1087 0x7f7f7523ff10

得到错误日志,这样就能定位到最后调用的那行代码

downLoadBtns是我们自定义的一个方法,在这个方法内部对新构建的UIButton做释放,它就是引起崩溃的元凶。

[btn release];
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 神帝归来张剑txt 张剑考研英语黄皮书 神帝归来张剑txt下载 张剑英语 富力地产董事长 富力集团董事长 张劲 张劼 张勋 张勋简介 张勋复弊 张勋复避 张勋甫 张北 张北公棚 张北北 张北县 张北北资料 张北北的歌 张北客栈 张北县招聘 张北县在哪 张北旅游 张北吧 张北草原自驾游攻略 拥抱你离去张北北 张北北拥抱你离去 张北草原旅游 拥抱你离去张北北dj版 张北旅游攻略 张北天路图片 张家口张北房地产 张家口到张北草原怎么走 张北中都草原旅游 拥抱你离去原唱张北北 张博 张博涵 张博元 叶棠张博元 张博雨 张博文