针对EXC_BAD_ACCESS
这种主要就是内存错误。
Thread 1: EXC_BAD_ACCESS (code=1, address=0x72cb278c0)
如何调试
- 全局断点调试
- 僵尸对象
1.全局断点调试
用全局断点,看是否可以定位到错误的位置。如图设置一下就OK了。有的时候是可以直接定位到出错的代码位置。
1.png2.僵尸对象调试(Zombie Objects
)
如何开启
2.png在Xcode中设置Product ->Scheme ->Edit Scheme -> Diagnostics -> Zombie Objects
这样一般在控制台都可以打印出是那个对象导致的。
例如:
-[UIView retain]: message sent to deallocated instance 0x7f906ca34790
但是这只给出了使用了已经被释放的UIView
内存地址,但具体的UIview
是哪个UIView
却无法知道。
这时候可以使用OSX
的malloc_history
命令,查找到一些调用信息
注意必须在模拟器上运行:
- 先打开
Debug
的ConsoleView
界面,让Xcode
在调试的时候输出更多的信息:菜单XCode -> Preferences
- 和选择僵尸对象一样,选中
Malloc Stack
Product ->Scheme ->Edit Scheme -> Diagnostics -> Malloc Stack
- 打开活动监视器找到到模拟器上运行的应用的
PID
5.png
这样PID和内存地址(0x7f906ca34790)都有了
(-[UIView retain]: message sent to deallocated instance 0x7f906ca34790)
最后一步打开终端输入:(pid:273
是我随便找的一个,这里应该是Xcode
项目的PID
)所有的堆栈信息都会打印出来了。
再次声明必须在模拟器上运行:
sudo malloc_history 273 0x7f906ca34790
网友评论