zoukankan      html  css  js  c++  java
  • 如何在LLDB下排查message sent to deallocated instance问题

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

    在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];

  • 相关阅读:
    EntityFramework查询联合查询(Join,GroupJoin)
    浏览器向服务器请求页面的原理
    如何获取浏览器类型和版本
    64位Win7下32位IE无法启动问题
    jQuery 收藏
    JavaScript五种继承方式[转]
    针对模板页面的数据爬虫实现方法探讨
    ArcGISFlexSDK中关于切换地图问题(不同范围)
    NodeJS缓存文件夹遍历
    高通配置uart
  • 原文地址:https://www.cnblogs.com/xitang/p/4111645.html
Copyright © 2011-2022 走看看