Я только что вытаскиваю свои волосы, пытаясь заставить Инструменты кашлять в моих сознательно сконструированных утечках памяти. Мой пример теста выглядит так:Проверка утечки памяти с помощью инструментов на Mac
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;
}
В основном приборы никогда не находили очевидных утечек. Я с ума сходил, но затем обнаружил «sec Between Auto Detections» в панели «Конфигурация утечек» на панели «Утечки». Я набрал его так низко, как это было бы, что было 1 секундой, и поместил сон (2) в мой код и вуаля; найдены утечки!
Насколько я знаю, утечка является утечкой, независимо от того, происходит ли это 30 минут в приложении или 30 миллисекунд. В моем случае я отменил тестовый пример до вышеуказанного кода, но мое реальное приложение - это приложение с командной строкой без интерфейса или что-то еще, и оно выполняется очень быстро; конечно, меньше интервала выборки по умолчанию 10 секунд.
Итак, я могу прожить пару секунд после выхода из моего приложения в режиме инструментария, но то, что я ДЕЙСТВИТЕЛЬНО хочу, состоит в том, чтобы просто иметь память снимков инструментов при выходе, а затем делать все, что нужно, с течением времени, когда приложение бежит.
Итак ... вопрос в том, есть ли способ сделать снимки памяти инструментов при выходе из приложения независимо от интервала выборки?
Cheers,
Шейн
Да, я согласен, инструменты, кажется, направлены на Event Driven среды. Кроме того, мой XCode всегда на последней версии из-за программирования iPad/iPhone. DTrace было хорошим предложением, я рассмотрю его. На этом этапе я действительно думаю, что просто оставлю 2 секунды в конце. Это работает, но немного раздражает. – Shane