加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 使用Mac上的Instruments进行内存泄漏检查

发布时间:2020-12-14 17:36:23 所属栏目:百科 来源:网络整理
导读:我一直在拉着我的头发试图让仪器咳嗽我故意构造的内存泄漏.我的测试示例如下所示: class Leaker{public: char *_array; Leaker() { _array=new char[1000]; } ~Leaker() { }};void *leaker(){ void *p=malloc(1000); int *pa=new int[2000]; { Leaker l; Le
我一直在拉着我的头发试图让仪器咳嗽我故意构造的内存泄漏.我的测试示例如下所示:

class Leaker
{
public:
    char *_array;
    Leaker()
    {
        _array=new char[1000];
    }

    ~Leaker()
    {
    }
};

void *leaker()
{
    void *p=malloc(1000);
    int *pa=new int[2000];
    {
        Leaker l;
        Leaker *pl=new Leaker();
    }
    return p;
}

int main (int argc,char **argv)
{
    for (int i=0; i<1000; ++i) {
        leaker();
    }
    sleep(2); // Needed to give Instruments a chance to poll memory
    return 0;
}

基本上仪器从未发现明显的泄漏.我为什么要疯了,但随后在泄漏面板下的“泄漏配置”面板中发现了“自动检测之间的秒”.我把它拨回原来的最低点,这是1秒,然后将睡眠(2)放入我的代码中,瞧不起;泄漏发现!

就我而言,泄漏是泄漏,无论是在应用程序30分钟内发生还是30毫秒.在我的情况下,我将测试用例剥离回上面的代码,但我的真实应用程序是一个没有UI或任何东西的命令行应用程序,它运行得非常快;肯定小于默认的10秒采样间隔.

好吧,所以我可以在我的应用程序退出检测模式时使用几秒钟,但我真正想要的是,只需在退出时使用Instruments快照内存,然后在应用程序运行时随时执行任何需要.

所以…问题是:有没有办法在退出应用程序时使仪器快照存储器,无论采样间隔是多少?

干杯,

巴蒂尔

解决方法

泄漏模式下的仪器对于泄漏跟踪非常有用,但我发现它比基于事件的GUI应用更偏向于命令行程序(特别是那些在短时间后退出的程序).曾经有一个 CHUD API,您可以通过编程方式控制检测的各个方面,但上次我尝试时,框架不再作为SDK的一部分提供.也许其中一些现在已被 Dtrace取代.

此外,请确保您与Xcode保持同步,因为此区域最近有一些改进,可能更容易满足您的需求.您也可以在退出之前保持短暂延迟,但要以环境变量的存在为条件,然后在应用程序的Instruments启动属性中设置该环境变量,以便在Instruments外部运行没有延迟.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读