EXC_BAD_ACCESS 查错步骤
2016-04-20 11:33
288 查看
EXC_BAD_ACCESS, objc_msgSend,
此类报错往往来的莫明奇妙.
原因往往是内存过度释放导致, 即多写了release;
至于是哪里多写了release, 很难查知, 以下及为查询方法.
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/27/2c71e47035b98de4b5d374885e4a6d05.jpg)
Xcode5.1.1
Xcode 自带开发工具 Instrument6.0
Xcode -> Product -> Scheme -> EditScheme;
增添MallocStackLogging和NSZombieEnabled两个环境变量;
分别用于记录内存alloc和监控zombie内存.
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/27/3d3d1a03392d74b21f6caa46a16d49a8.jpg)
重新运行项目至崩溃点. 此时程序会打印额外的关于内存的日志
程序崩溃点得到如下日志:
--------------------------------------------------------------------------------------------------
2014-09-30 10:24:38.753 P2PCamLive[280:20505]
*** -[UILabel release]: message sent to deallocated instance 0x17eb9800
--------------------------------------------------------------------------------------------------
可知, 是由于UILabel dealloc时崩溃, 基本确定是过度释放内存导致.
打开Instruments工具:
Xcode -> Open Developer Tool -> Instruments,
选择Zombies类型.
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/27/45076a438e6ee2e8257423129a332f68.jpg)
重新启动运行Project, 先不要执行到崩溃点.
在打开的Instruments工具中choose要检查的程序名称;
然后点击Instruments左上角的record按钮, 开始记录内存使用情况.
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/27/fcaa1d759d930dab4bc30907c4892adf.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/27/facdbc6099f9d7a8449c3a63ebbf5c40.jpg)
继续执行程序至崩溃点.
程序执行到第40秒报出zombie Messaged错误;
点击图中圈选的">"查看内存详情.
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/27/3ae3cc136ee3bf604f9367ba09ec2465.jpg)
分析内存调用详情:
排除操作系统retain, release的部分,
可知是由于CameraLiveViewController执行dealloc,
对内存0x180d5420多调用了release.
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/27/2e178c218987bdbd681144142ea538a6.jpg)
综合以上结果:
可知是存在于CameraLiveViewController中的一个UILabel多执行了release.
此时可添加代码对CameraLiveViewController中的可疑UILabel打印日志.
重新执行上述过程, 对比打印UILabel与Zobmie内存的地址,
从而定位出错位置.
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/27/8bd05b8730afd7d04d221327d8f19aef.jpg)
原文的url:http://jingyan.baidu.com/article/fcb5aff7851553edaa4a71bb.html
此类报错往往来的莫明奇妙.
原因往往是内存过度释放导致, 即多写了release;
至于是哪里多写了release, 很难查知, 以下及为查询方法.
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/27/2c71e47035b98de4b5d374885e4a6d05.jpg)
工具/原料
Xcode5.1.1Xcode 自带开发工具 Instrument6.0
方法/步骤
Xcode -> Product -> Scheme -> EditScheme;增添MallocStackLogging和NSZombieEnabled两个环境变量;
分别用于记录内存alloc和监控zombie内存.
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/27/3d3d1a03392d74b21f6caa46a16d49a8.jpg)
重新运行项目至崩溃点. 此时程序会打印额外的关于内存的日志
程序崩溃点得到如下日志:
--------------------------------------------------------------------------------------------------
2014-09-30 10:24:38.753 P2PCamLive[280:20505]
*** -[UILabel release]: message sent to deallocated instance 0x17eb9800
--------------------------------------------------------------------------------------------------
可知, 是由于UILabel dealloc时崩溃, 基本确定是过度释放内存导致.
打开Instruments工具:
Xcode -> Open Developer Tool -> Instruments,
选择Zombies类型.
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/27/45076a438e6ee2e8257423129a332f68.jpg)
重新启动运行Project, 先不要执行到崩溃点.
在打开的Instruments工具中choose要检查的程序名称;
然后点击Instruments左上角的record按钮, 开始记录内存使用情况.
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/27/fcaa1d759d930dab4bc30907c4892adf.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/27/facdbc6099f9d7a8449c3a63ebbf5c40.jpg)
继续执行程序至崩溃点.
程序执行到第40秒报出zombie Messaged错误;
点击图中圈选的">"查看内存详情.
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/27/3ae3cc136ee3bf604f9367ba09ec2465.jpg)
分析内存调用详情:
排除操作系统retain, release的部分,
可知是由于CameraLiveViewController执行dealloc,
对内存0x180d5420多调用了release.
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/27/2e178c218987bdbd681144142ea538a6.jpg)
综合以上结果:
可知是存在于CameraLiveViewController中的一个UILabel多执行了release.
此时可添加代码对CameraLiveViewController中的可疑UILabel打印日志.
重新执行上述过程, 对比打印UILabel与Zobmie内存的地址,
从而定位出错位置.
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/27/8bd05b8730afd7d04d221327d8f19aef.jpg)
原文的url:http://jingyan.baidu.com/article/fcb5aff7851553edaa4a71bb.html
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 个人信息安全报告发布:有 APP 每分钟调用位置权限 1468 次
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- 下载量超过一亿的流行应用被发现含有恶意模块
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 苹果与Siri的七年之痒:“宫斗”戏码不断上演
- APP添加CNZZ统计插件教程 Android版添加phonegap
- Android APP与媒体存储服务的交互
- java实现收藏名言语句台词的app
- 修改Android App样式风格的方法
- Android App数据格式Json解析方法和常见问题
- 讲解iOS开发中基本的定位功能实现
- iOS中定位当前位置坐标及转换为火星坐标的方法
- js判断客户端是iOS还是Android等移动终端的方法
- iOS应用中UISearchDisplayController搜索效果的用法
- IOS开发环境windows化攻略