ios message sent to deallocated instance 重复release 内存问题
2015-11-03 17:26
736 查看
在XCode的以前版本中,如果遇到了
我们可以使用info malloc-history 0x6d564f0来查看调用堆栈来查看崩溃发生的地方,这种方法这里不作阐述,大家自行百度。
在新的XCode里,调试器默认使用LLDB,我就讲一下如何在LLDB状态下定位到由于内存操作不当引起的Crash
首先我有一段会发生崩溃的代码:
学过内存管理的人都应该知道在这里themePath并没有被retain,所以如果写了release,那么必然会发生崩溃情况。首先我们需要对开发的环境变量进行设置
![](http://www.devdiv.com/data/attachment/album/201305/16/112548joe07njwo7hd6hi0.png)
运行代码,出现下面的崩溃现象
![](http://www.devdiv.com/data/attachment/album/201305/16/112645nhos6en5bhespide.png)
下面我们打开“活动监视器”,找到我们对应的PID,我们的Target为HPThemeManager,只要找到HPThemeManager对应的PID就可以(HPThemeManager是在论坛里下载的,本来正在看代码,就直接拿他来作试验了)
![](http://www.devdiv.com/data/attachment/album/201305/16/112909rubruzqucwuwhmrs.png)
现在,我们得到了两个主要的信息:
进程ID:50127
崩溃地址:0x6d564f0
结果显示为:
![](http://www.devdiv.com/data/attachment/album/201305/16/113215qql36pq4b1s94r66.png)
这样我们用能定位到这行代码
对themePath进行排查,就找到了崩溃的罪魁祸首
原文地址: http://www.devdiv.com/lldb_message_sent_to_deallocated_instance_-blog-50901-50856.html
[代码]c#/cpp/oc代码:
1 | message sent to deallocated instance 0x6d564f0 |
在新的XCode里,调试器默认使用LLDB,我就讲一下如何在LLDB状态下定位到由于内存操作不当引起的Crash
首先我有一段会发生崩溃的代码:
[代码]c#/cpp/oc代码:
1 | NSString *themePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:themePathTmp]; |
2 | if (themePath) |
3 | self.backgroundIV.image = [UIImage imageWithContentsOfFile:[themePath stringByAppendingPathComponent: @"mask_1.png" ]]; |
4 |
5 | [themePath release]; |
![](http://www.devdiv.com/data/attachment/album/201305/16/112548joe07njwo7hd6hi0.png)
运行代码,出现下面的崩溃现象
![](http://www.devdiv.com/data/attachment/album/201305/16/112645nhos6en5bhespide.png)
下面我们打开“活动监视器”,找到我们对应的PID,我们的Target为HPThemeManager,只要找到HPThemeManager对应的PID就可以(HPThemeManager是在论坛里下载的,本来正在看代码,就直接拿他来作试验了)
![](http://www.devdiv.com/data/attachment/album/201305/16/112909rubruzqucwuwhmrs.png)
现在,我们得到了两个主要的信息:
进程ID:50127
崩溃地址:0x6d564f0
我们打开终端,输入以下命令:
[代码]c#/cpp/oc代码:
1 | sudo malloc_history 50127 0x6d564f0 |
![](http://www.devdiv.com/data/attachment/album/201305/16/113215qql36pq4b1s94r66.png)
这样我们用能定位到这行代码
[代码]c#/cpp/oc代码:
1 | NSString *themePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:themePathTmp]; |
[代码]c#/cpp/oc代码:
1 | [themePath release]; |
相关文章推荐
- iOS开发中自定义按钮
- iOS开发之使用CocoaPods更新第三方出现“target overrides the `OTHER_LDFLAGS`……”问题解决方案
- iOS开发——字符串去除回车符和两端空格
- iOS小记
- IOS 开发过程中常用的系统 函数
- IOS中的单例模式
- 开始iOS 7中自动布局教程(一)
- 自定义iOS7导航栏背景,标题和返回按钮文字颜色
- iOS 获取文件的目录路径的几种方法
- iOS 后台运行 类型
- iOS第三方
- IOS开发中NSRunloop跟NSTimer的问题
- 获取当前时区时间 iOS
- IOS生产实习知识
- iOS---tableview
- IOS 开发didFinishLaunchingWithOptions 设置启动View
- JS判断客户端是否是iOS或者Android
- ios NSNotificationCenter 收到通知后的执行线程
- iOS中 RGB与HSV的相互转换
- iOS应用内支付(IAP)开发中后期的那些坑