message sent to deallocated instance
2015-08-31 14:37
357 查看
在XCode的以前版本中,如果遇到了
我们可以使用info malloc-history 0x6d564f0来查看调用堆栈来查看崩溃发生的地方,这种方法这里不作阐述,大家自行百度。
在新的XCode里,调试器默认使用LLDB,我就讲一下如何在LLDB状态下定位到由于内存操作不当引起的Crash
首先我有一段会发生崩溃的代码:
学过内存管理的人都应该知道在这里themePath并没有被retain,所以如果写了release,那么必然会发生崩溃情况。首先我们需要对开发的环境变量进行设置
运行代码,出现下面的崩溃现象
下面我们打开“活动监视器”,找到我们对应的PID,我们的Target为HPThemeManager,只要找到HPThemeManager对应的PID就可以(HPThemeManager是在论坛里下载的,本来正在看代码,就直接拿他来作试验了)
现在,我们得到了两个主要的信息:
进程ID:50127
崩溃地址:0x6d564f0
结果显示为:
这样我们用能定位到这行代码
对themePath进行排查,就找到了崩溃的罪魁祸首
[代码]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]; |
运行代码,出现下面的崩溃现象
下面我们打开“活动监视器”,找到我们对应的PID,我们的Target为HPThemeManager,只要找到HPThemeManager对应的PID就可以(HPThemeManager是在论坛里下载的,本来正在看代码,就直接拿他来作试验了)
现在,我们得到了两个主要的信息:
进程ID:50127
崩溃地址:0x6d564f0
我们打开终端,输入以下命令:
[代码]c#/cpp/oc代码:
1 | sudo malloc_history 50127 0x6d564f0 |
这样我们用能定位到这行代码
[代码]c#/cpp/oc代码:
1 | NSString *themePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:themePathTmp]; |
[代码]c#/cpp/oc代码:
1 | [themePath release]; |
相关文章推荐
- STM32 学习记录(目录)
- Unicode(UTF-8, UTF-16)令人混淆的概念
- Maven 环境变量设置
- SharePoint 2013 IT Professional——View Setting之Group By
- 在Mac OS X上安装Virtual Box 和 Vagrant
- mybatis学习教程(二)初级的增、删、查、改
- verilog HDL 学习的要点
- DFS(深度) hihoCoder挑战赛14 B 赛车
- OC之成员变量封装
- Android surfaceview 自定义相机 拍照(闪光灯、前后摄像头)
- org.apache.log4j.Logger 详解
- CloseHandle(),TerminateThread(),ExitThread()的区别
- 【Linux】linux下zlib压缩与crc32校验
- 文件管理NSFileManager
- ibatis 调用存储过程
- linux 查找并删除
- 解决报错:A potentially dangerous Request.Form value was detected from the client
- Thread 1: EXC_BAD_ACCESS
- 动态规划4-编辑距离问题
- 解决ORA-00054资源正忙的问题