如何在LLDB下排查message sent to deallocated instance问题

转载 2015年07月09日 19:23:54

如何在LLDB下排查message sent to deallocated instance问题

热度 2已有 5742 次阅读 2013-5-16 11:33 |系统分类:移动互联网

在XCode的以前版本中,如果遇到了

[代码]c#/cpp/oc代码:

1 message sent to deallocated instance 0x6d564f0
我们可以使用info malloc-history 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];
学过内存管理的人都应该知道在这里themePath并没有被retain,所以如果写了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];

对themePath进行排查,就找到了崩溃的罪魁祸首

[代码]c#/cpp/oc代码:

1 [themePath release];

我在开发中遇到的bug

1.仿作91助手的时候,网络连接的时候没有崩溃,断开网络后运行时在点击搜索这个tabBar出现如下崩溃信息 崩溃信息: *** Terminating app due to uncaught exc...
  • zhangyulin311
  • zhangyulin311
  • 2016年03月20日 11:14
  • 1507

iOS 工程 兼容64位 容易遇到的问题

tips: 相信目前大部分APP的工程框架已经是支持64bit,但是就在几天前,遇到一个公司几年前的框架,SQLCipher数据库加密,AES加密,ASI网络请求,JSONKit,ZipArchiv...
  • u010731949
  • u010731949
  • 2016年09月07日 10:55
  • 1241

XM_NSNotification(一个能够自动移除监听对象保证通知安全的小助手)

最近写了一个小小框架吧,当然,也可以说是小功能吧,随着知识面的增加,我发现自己未知的东西越来越多,因此也不敢说自己写的东西算上什么框架,在我印象里,框架好像都是大神才能写出来的东西,但是毕竟自己也花了...
  • XMIOS
  • XMIOS
  • 2016年06月11日 16:50
  • 905

“unrecognized selector sent to instance”问题原因之一及解决方法。

对于iPhone开发初学者来说,很想实现自己在iPhone上的第一个小程序,准备工作就绪侯就信心满满的开始了!一般来说大家可能都是从Hello World做起吧。 反正我是的,:),如果按照文档上的...
  • yuanya
  • yuanya
  • 2013年04月29日 12:31
  • 687

openfire源码修改聊天消息发送内容

openfire源码修改聊天消息发送内容     /** * $RCSfile: MessageRouter.java,v $ * $Revision...
  • w690333243
  • w690333243
  • 2017年06月12日 10:07
  • 321

java线上服务问题排查

1、业务日志相关 如果系统出现异常或者业务有异常,首先想到的都是查看业务日志 查看日志工具: less 或者more grep tail -f filename 查看实时的最新内容 ps...
  • and1kaney
  • and1kaney
  • 2016年04月22日 00:10
  • 7092

Java问题排查(运维篇)

每一位开发想必都会遇到线上服务告警,而导致这样原因的肯能有流量增加或是代码中bug异常没有抓住导致,而此刻我们就需要去排查问题。 1:业务增加,导致FGC频繁发送,如果不知道如何查看FGC的话,可以参...
  • Barnetthe
  • Barnetthe
  • 2015年08月20日 10:15
  • 684

常见的Java问题排查方法

以下是Java应用在运行时常见的一些问题,总结了运行时黑盒方式的一些排查方法,也希望看到的同学能给予补充,无论是补充碰到的问题,还是补充解决方法。 类装载的相关问题 写过Java代码的同学估计...
  • youling_lh
  • youling_lh
  • 2013年11月18日 21:51
  • 1312

Java应用线上问题排查的常用工具和方法

在长期排查线上问题的过程中,总结了一些工具的用法和排查问题的思路,这里跟大家分享一下,在遇到类似的问题时,希望能给予一些帮助。   首先讲讲工具, jvm 自带的一些工具是必须熟练掌握的,例如j...
  • lipc_
  • lipc_
  • 2016年10月04日 13:37
  • 695

排查Java线上服务故障的方法和实例分析

前言   作为在线系统负责人或者是一个技术专家,你可能刚刚接手一个项目就需要处理紧急故障,或者被要求帮忙处理一些紧急的故障,这个时候的情景是:   (1)你可能对这个业务仅仅是听说过,而不...
  • lipc_
  • lipc_
  • 2016年10月04日 13:38
  • 1742
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何在LLDB下排查message sent to deallocated instance问题
举报原因:
原因补充:

(最多只允许输入30个字)