나는 의도적으로 구성된 메모리 누수가 발생하도록 악기를 만들려고 노력하고 있습니다. 내 테스트 예제는 다음과 같습니다.Mac에서 Instruments를 사용하여 메모리 누수 검사
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;
}
기본적으로 계측기는 명백한 누출을 발견하지 못했습니다. 나는 그 이유에 관해서 말하려고했지만, Leaks 패널의 "Leaks Configuration"패널에서 "sec between Between Auto Detections"를 발견했습니다. 나는 그것을 되돌릴 것이고, 1 초 였고, sleep (2)을 내 코드에 넣었다. 그리고 voila; 누수가 발견되었습니다!
내가 아는 한 누출은 앱에 30 분 또는 30 밀리 초에 관계없이 누수입니다. 필자의 경우, 테스트 케이스를 위의 코드로 되 돌렸지 만, 실제 애플리케이션은 UI가없는 커맨드 라인 애플리케이션이며 매우 빠르게 실행된다. 확실히 기본 10 초 샘플 간격보다 적습니다.
계측 모드에서 앱을 종료 할 때 몇 초가 지나면 살 수 있지만, 정말로 필요로하는 것은 단순히 기기가 종료 할 때 스냅 샷 메모리를 갖게하고 앱이 실행되는 동안 시간이 지남에 따라 필요한 모든 작업을 수행하는 것입니다. 실행 중입니다.
질문 : 샘플링 간격에 관계없이 어플라이언스가 애플리케이션 종료시 스냅 샷 메모리를 만들 수있는 방법이 있습니까?
건배,
쉐인
예를 들어, 인스트루먼트는 이벤트 중심 환경에 적합하다고 생각합니다. 또한, 내 Xcode는 iPad/iPhone 프로그래밍으로 인해 항상 최신 버전입니다. DTrace는 좋은 제안이었습니다. 이 시점에서 저는 실제로 2 초를 남겨 둘 것이라고 생각하고 있습니다. 그것은 효과가 있지만 약간 성가시다. – Shane