디버깅 NSZombieEnabled
하는 true
동안 설정하라는 제안을 보았습니다 . NSZombie는 무엇입니까? 프레임 워크입니까? 설정?
디버깅 NSZombieEnabled
하는 true
동안 설정하라는 제안을 보았습니다 . NSZombie는 무엇입니까? 프레임 워크입니까? 설정?
답변:
메모리 디버깅 보조 도구입니다. 특히, NSZombieEnabled
객체가 할당 해제되지 않고 0에 도달 할 때마다 NSZombie
인스턴스 로 모핑됩니다 . 그러한 좀비가 메시지를받을 때마다 충돌하거나 예측할 수없는 방식으로 행동하는 대신 경고를 기록합니다. 따라서 고급 도구 나 건초 더미 검색에서 힘든 바늘없이 미묘한 과다 릴리스 / 자동 릴리스 문제를 디버깅 할 수 있습니다.
이름은 개체가 0에 도달 할 때 일반적으로 "죽은"것으로 간주된다는 사실에 대한 상당히 명백한 놀이입니다.이 설정을 사용하면 개체는 살아 있거나 죽지 않은 이상한 반감기에 계속 존재합니다. 실제 좀비와 비슷하지만 뇌를 덜 먹습니다.
Adam은 좀비가 무엇인지 잘 설명했지만 환경 변수를 사용하는 것이이를 찾고 추적하는 가장 좋은 방법은 아닙니다.
좀비 탐지에 대한 훨씬 더 나은 접근 방식은 Instruments를 사용하는 것입니다. XCode에서 "Run with Instrument"로 시작하고 "Allocations"를 선택합니다.
그런 다음 녹화가 시작된 직후에 중지하고 Allocations 기기에서 "i"버튼을 누르고 "enable reference counts"및 "Enable NSZombie Detection"을 켭니다. 이제 악기에서 녹음을 다시 누르면 앱이 시작됩니다. 좀비 개체가 전송되면 메시지 녹음이 중지되고 녹음 타임 라인에 대화 상자가 나타납니다.이를 클릭하여 개체가 있던 모든 장소를 찾을 수 있습니다. 유지 또는 해제됩니다.
편집 : 이전 조언은 XCode 3에 대한 것이었고 여기에 XCode 4에 대한 추가 사항이 있습니다.
XCode 4.2 에는 Zombie Detection을 사용하는 더 쉬운 메커니즘 인 Zombie Instrument가 있습니다. 앱을 시작하기 위해 "실행"대신 "프로필"을 사용하면 악기 선택기가 나타납니다. "Zombie"를 선택하면 앱이 실행되기 시작합니다. 크래시를 유발하는 모든 작업을 수행하면 "Zombie Messaged"라는 대화 상자가 나타납니다.
여기에서 대화 상자의 작은 화살표를 클릭합니다. 그러면 좀비 개체가 생성, 유지 또는 해제 된 모든 시간의 목록이 표시됩니다. 사이드 바를 위로 당기면 각 항목으로 이동하여 보유 수의 각 조정을 담당 한 코드에 대한 스택 추적을 볼 수 있습니다.
Kendall이 추가 한 내용에 동의합니다. 매우 유용하지만 여전히 환경 변수를 사용하여 활성화 된 것을 잊지 않도록 권장합니다. Cocoa Dev의 (현재 만료 된) 링크와 유사하게, 저는 이것을 놓치기 때문에 놓치지 않습니다.
if(getenv("NSZombieEnabled") || getenv("NSAutoreleaseFreedObjectCheckEnabled")) {
NSLog(@"ZOMBIES/AFOC ARE ENABLED!!! AAAAARRRRRRGH!!! BRAINS!!!");
}
그것은 내 관심을 아주 잘 잡습니다.