我一直在拔头发,试图让仪器咳出我故意制造的记忆泄漏。我的测试示例如下所示:
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秒示例间隔要小。
好的,我可以在我的应用程序以插装模式退出时保持几秒钟的时间,但我真正想要的是,在退出时,只需在工具快照内存中,然后在应用程序运行时,随时间做它所需要的任何事情。
所以..。问题是:是否有一种方法可以在应用程序退出时使仪器快照内存,而不管采样间隔是多少?
干杯,
沙恩
发布于 2010-06-28 14:20:06
发布于 2015-05-22 04:06:59
大多数单元测试代码执行所需的代码路径和退出。虽然这对于单元测试来说是完全正常的,但是它给泄漏工具带来了一个问题,它需要时间来分析进程内存空间。要解决这个问题,您应该确保单元测试代码在完成测试后不会立即退出。您可以通过让进程无限期地睡眠来实现这一点,而不是正常退出。
发布于 2010-07-06 21:13:53
我刚刚决定在我的debug+leaking构建过程中留下2秒的延迟。
https://stackoverflow.com/questions/3122617
复制相似问题