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

本文在源文的基础上做整理: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];
时间: 2024-08-28 06:43:05

解决LLDB模式下出现message sent to deallocated instance错误的相关文章

如何在LLDB下排查message sent to deallocated instance问题

转:http://www.devdiv.com/home.php?mod=space&uid=50901&do=blog&id=50856 在XCode的以前版本中,如果遇到了 [代码]c#/cpp/oc代码: 1 message sent to deallocated instance 0x6d564f0 我们可以使用info malloc-history 0x6d564f0来查看调用堆栈来查看崩溃发生的地方,这种方法这里不作阐述,大家自行百度. 在新的XCode里,调试器默认使

message sent to deallocated instance

在XCode的以前版本中,如果遇到了 1 message sent to deallocated instance 0x6d564f0 我们可以使用info malloc-history 0x6d564f0来查看调用堆栈来查看崩溃发生的地方,这种方法这里不作阐述,大家自行百度. 在新的XCode里,调试器默认使用LLDB,我就讲一下如何在LLDB状态下定位到由于内存操作不当引起的Crash 首先我有一段会发生崩溃的代码: 1 NSString *themePath = [[[NSBundle m

调试message send to deallocated instance问题

message sent to deallocated instance 在XCode的以前版本中,如果遇到了 [代码]c#/cpp/oc代码: 1 message sent to deallocated instance 0x6d564f0 我们可以使用info malloc-history 0x6d564f0来查看调用堆栈来查看崩溃发生的地方,这种方法这里不作阐述,大家自行百度. 在新的XCode里,调试器默认使用LLDB,我就讲一下如何在LLDB状态下定位到由于内存操作不当引起的Crash

message sent to deallocated instance 崩溃 解决方案

一.情况 1,Xcode中有时候奔溃会提示类似这样的提示 : *** -[CAShapeLayer retain]: message sent to deallocated instance 0x27368d10 2,有时候我们会毫无头绪排查,这时候如果我们想要获取更多详细的信息那么可以用终端里的malloc_history命令来解决. 二.步骤 1,使用模拟器运行项目,并且记住项目名比如:zhihuiyun 2,记录崩溃的内存地址比如:0x27659700 3,打开活动监视器,找出你项目的pi

关于iOS8上使用UITextView内存泄漏的一个坑:-[UITextView textInputView]: message sent to deallocated instance

问题: 第一次从一个页面跳转到编辑控制器没有什么问题,当返回后再次进入编辑控制器点击UITextView出现内存泄漏错误,通过僵尸断点发现错误:-[UITextView textInputView]: message sent to deallocated instance 0x159fc800,测试环境是真机(iPhone5,iOS8.4),我又试着在iOS10的系统上测试,发现并没有什么问题,可能iOS8和10的一些内存处理策略不一样. 解决方法: 这个bug调试了很久,最后几经查阅资料,在

message sent to deallocated instance 多次释放

1.scroll view did scroll 问题:*** -[DetailPageViewController scrollViewDidScroll:]: message sent to deallocated instance 0x19a13c90原因:viewController释放之后,scrollViewDidScroll:方法又被调用,解决:将调用该方法的delegate置为nil. 2.nsindexpath section 问题: *** -[NSIndexPath sec

runtime MethodSwizzle 实践之 奇怪crash : [UIKeyboardLayoutStar release]: message sent to deallocated instance

情景: 使用MethodSwizzle 实现对数组.字典 等系统方法的安全校验.显然能达到预期效果,但实际发现当 键盘显示的情况下  home app 进入后台,再单击app  图标 切换回前台时 发生crash : [UIKeyboardLayoutStar release]: message sent to deallocated instance UIKeyboardLayoutStar 是键盘上的布局的视图吧, 整个工程都在ARC下 构建,很奇怪,而且必须. 信息: http://hua

Xcode调试之exc_bad_access以及 message sent to deallocated instance

如果出现exc_bad_access错误,基本上是由于内存泄漏,错误释放,对一个已经释放的对象进行release操作.但是xcode有时候不会告诉你错误在什么地方(Visual Studio这点做得很好).不过我们可以通过设置xcode环境变量环境变量NSZombieEnabled,MallocStackLogging查看错误的来源: 1.菜单 Product > Manage Schemes; 2.选中当前的Scheme,点Edit按钮: 3.设置环境变量.在Arguments > Envi

os x 中出现message sent to deallocated instance 的错误总结

一般是程序中的某一个对象被release 了两次 一般情况下是与你定义的类型有关 这里面我的错误是吧 NSString 类型的变量的属性 设置为了 assign 了 目测与这个有关 补充object-c 基础 property,assign,copy,retain,release property:属性的定义相当于C中的setter和getter方法 assign:简单的赋值,不更改索引的计数器 使用场景 对基础的数据类型进行设置 比如 NSInterger,CGFloat和C里边的基础数据类型