本文在源文的基础上作整理:http://www.devdiv.com/home.php?mod=space&uid=50901&do=blog&id=50856php
Xcode版本7.1 IOS版本9.1测试
公司以前开发的一个APP,在使用环境中IOS版本升级到9.0之后,某个操做会致使程序闪退。ui
Xcode代码中提示错误:spa
Thread 1: Program received signal:"EXC_BAD_ACCESS"
这样的提示意味着对已经释放的对象发送消息,或者对不能release的对象调用release。3d
默认状况下Xcode并不能准肯定位到具体哪行代码引发的问题。调试
咱们先对开发环境进行设置日志
先打开Debug的Console View界面,让Xcode在调试的时候输出更多的信息:菜单XCode > Preferencescode
再对环境变量进行设置:菜单Product > Scheme > Edit Scheme对象
设置好后调试程序,在输出界面发现了message sent to deallocated instance错误日志blog
在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];