我一直在拉着我的头发试图让仪器咳嗽我故意构造的内存泄漏.我的测试示例如下所示:
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快照内存,然后在应用程序运行时随时执行任何需要.
所以…问题是:有没有办法在退出应用程序时使仪器快照存储器,无论采样间隔是多少?
干杯,
巴蒂尔