僵尸调试-根据内存定位代码执行位置

LLDB出现message sent to deallocated instance错误

本文在源文的基础上做整理:

http://www.devdiv.com/home.php?mod=space&uid=50901&do=blog&id=50856

解决LLDB模式下出现message sent to deallocated instance错误

Xcode版本7.1  iOS版本9.1

Xcode代码中提示错误:

Thread 1: Program received signal:"EXC_BAD_ACCESS"

这样的提示意味着对已经释放的对象发送消息,或者对不能release的对象调用release。

默认情况下Xcode并不能准确定位到具体哪行代码引起的问题。

我们先对开发环境进行设置

先打开DebugConsole View界面,让Xcode在调试的时候输出更多的信息:菜单XCode > Preferences

ConsoleView.jpg

再对环境变量进行设置:菜单Product > Scheme > Edit Scheme

EditScheme.jpg

设置好后调试程序,在输出界面发现了message sent to deallocated instance错误日志

错误日志.jpg

在Xcode的以前版本中,我们可以在Xcode的Console View中使用info malloc-history 0x6d564f0来查看调用堆栈来查看崩溃发生的地方。

在新的Xcode中,调试器默认使用的LLDB,那么怎么在LLDB状态下定位由于内存操作不当引起的Crash呢?

打开“活动监视器”,在进程列表中找到测试APP对应的进程号PID(Xcode启用调试后会在进程列表中找到对应APP的进程)

活动监视器.jpg

现在我们得到两个主要的信息:

APP进程ID:1087

崩溃地址:0x7f7f7523ff10

打开终端,输入以下命令:

sudo malloc_history 1087 0x7f7f7523ff10

得到错误日志,这样就能定位到最后调用的那行代码

定位代码.jpg

downLoadBtns是我们自定义的一个方法,在这个方法内部对新构建的UIButton做释放,它就是引起崩溃的元凶。

[btn release];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 当你写一个应用程序,你将不可避免地犯错误。 更糟糕的是,您的应用程序设计中会时不时地出现错误。 Xcode 的调试...
    titvax阅读 3,998评论 0 0
  • 前言 Bebug调试程序是开发中最常见的问题,对于一些简单有效的调试技巧的了解是很有必要的。这篇文章就列举Debu...
    進无尽阅读 4,042评论 0 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,773评论 19 139
  • 问题描述 近来,发现Xcode的模拟器越来越不靠不住了,应用开发完,在模拟器上面各种流畅各种运行得飞起,但是安装到...
    甘邦阅读 14,718评论 27 96
  • 转自:http://www.jianshu.com/p/f6e6b4f21ca2 因为遇到一个比较诡异的野指针问题...
    Satelens阅读 8,043评论 1 5