Xcode에서 NSZombie를 활성화하는 방법은 무엇입니까?


302

오류 추적없이 충돌하는 앱이 있습니다. 디버깅하면 어떤 일이 일어나고 있는지 볼 수 있지만 어떤 개체가 "좀비"인지 알아낼 수는 없습니다.

아무도 Xcode 4에서 NSZombie를 활성화하는 방법을 알고 있습니까?

답변:


440

환경 변수는 이제 "체계"의 일부입니다.

구성표를 편집하고 좀비를 켜려면

  • "제품"메뉴에서 "구성표 편집"을 선택하십시오.

  • 왼쪽 패널의 "Run Foo.app"단계 및 오른쪽의 "Arguments"탭으로 이동하십시오.

  • NSZombieEnabled"환경 변수"섹션에 추가 하고 YESXcode 3에서와 같이 값을로 설정하십시오 .


Xcode 4.1 이상 에서는 "Run"스테이지의 "Diagnostics"탭에 "Zombie Objects Enable"에 대한 확인란이 있습니다.


Xcode 6.4에서 :

스크린 샷


5
장치에서 할당 해제 된 개체에 대한 호출을 중단하지 않았습니까?
jjxtra

95
4.2에서 다시 변경되었습니다. 아래 답변을 참조하십시오. 제품 -> 편집 Scheme-> 진단으로 이동
모세 Kravchik

Xcode에서 맨 위에있는 도움말 메뉴 (오른쪽의 마지막 메뉴)에서 "구성표 편집"을 검색하면 모든 버전에서 매번 올바른 방향을 가리 킵니다.
unom

앱에서이 NSZombieEnabled 기능을 사용하도록 설정하면 앱을 출시하여 저장합니다 ..? 이 기능을 사용할 때 저장하기 위해 릴리스하는 것이 좋지 않다고 말하는 한 게시물을 보았 기 때문에.
SURESH SANKE

2
신인을 위해 Xcode 6.1에서 메뉴> 구성표 편집 구성표> 진단 탭> 확인란 좀비 개체 사용
Joshua Dance

146

EXC_BAD_ACCESS 문제 해결과 동일한 문제가 발생하여 Xcode 4.2 (iOS5 SDK와 함께 제공되는 최신 버전)로 설정을 찾기가 어려웠습니다. Apple은 계속 움직이고 설정은 더 이상 원래 있던 곳이 아닙니다.

다행히도 그것을 찾았으며 시뮬레이터뿐만 아니라 장치에서도 작동합니다. Xcode에서 제품 메뉴를 열고 구성표 편집을 선택한 다음 진단 탭을 선택해야합니다. "좀비 개체 사용"이 있습니다. 디버거에서 선택하고 실행하면 이중 해제 된 객체를 가리 킵니다. 즐겨!

한마디로

Product->Edit Scheme->Diagnostics-> Click Enable Zombie Objects

2
Xcode에서 맨 위에있는 도움말 메뉴 (오른쪽의 마지막 메뉴)에서 "구성표 편집"을 검색하면 모든 버전에서 매번 올바른 방향을 가리 킵니다.
unom

43

제품> 프로필이 기기를 시작하면 "좀비"라는 "추적 템플릿"이 있어야합니다. 그러나이 추적 템플릿은 현재 빌드 대상이 시뮬레이터 인 경우에만 사용할 수 있습니다. 대상이 iOS 장치로 설정되어 있으면 사용할 수 없습니다.

또한 주목해야 할 또 다른 점은 인스트루먼트 라이브러리에 실제 좀비 인스트루먼트가 없다는 것입니다. 좀비 추적 템플릿은 실제로 "NSZombie 탐지 사용"시작 구성 세트가있는 할당 장치로 구성됩니다.


13
"그러나이 추적 템플릿은 현재 빌드 대상이 시뮬레이터 인 경우에만 사용할 수 있습니다". 감사합니다!
ajh158

고마워, 그게 내가 찾던 것이었다!
Cliff Ribaudo

Xcode에서 맨 위에있는 도움말 메뉴 (오른쪽의 마지막 메뉴)에서 "구성표 편집"을 검색하면 모든 버전에서 매번 올바른 방향을 가리 킵니다.
unom

25

실행 파일에 환경 변수를 설정 한 (NSZombieEnabled = YES)다음 앱을 정상적으로 실행 / 디버깅 하는 간단한 문제입니다 . 좀비에게 메시지를 보내면 앱이 중단되거나 디버거와 NSLog메시지가 표시됩니다.

자세한 내용은 다음 CocoaDev 페이지를 확인하십시오. http://www.cocoadev.com/index.pl?NSZombieEnabled

또한이 프로세스는 10.6 릴리스와 다음 버전의 Xcode 및 Instruments로 훨씬 쉬워 질 것입니다. 그냥 말하기. =)


전적으로 동의 한. 새로운 좀비 악기는 매우 좋습니다.
Quinn Taylor

22

제품> 프로파일이 기기에 나타납니다. 패널에서 좀비를 선택하고 견과류를 이동하십시오.


5
@jluebbert Xcode 4.02를 실행하면서 확실히 보았 기 때문에 더 열심히 노력한다고 말하고 싶습니다
garageàtrois

16

제품으로 이동 -구성표-구성표 편집-인수-환경 변수 set NSZombieEnabled = YES

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오


12

xcode 4.2에서

제품으로 이동-> 구성표 편집-> yourappname.app 실행-> 대각선-> 좀비 개체 사용을 클릭하십시오.



6

Xcode 3.2.5 및 Snow Leopard (Mac OS X 10.6)부터 Zombies 기기를 통해 코드를 실행할 수 있습니다 Run > Run with Performance Tool > Zombies. 이를 통해 타임 라인에서 특정 객체와 해당 개수를 볼 수 있습니다.


1
좀비 옵션을 볼 수 있지만 회색으로 표시됩니다. 어떻게 활성화되어 있는지 알고 있습니까?
Rahul Vyas

@RahulVyas, 전에는 본 적이 없지만 가비지 수집 기능이 켜져 있습니까? 좀비가 그런 맥락에서 이해가되지 않는 것을 볼 수있었습니다
Dov

지원되는 [-fobjc-gc]를 표시하는 설정에서 가비지 수집을 설정했지만 여전히 해당 옵션이 비활성화되어 있습니다. 실제로 기기 범주에서는 마지막 5 개의 옵션 만 활성화됩니다. 다른 아이디어? 아니면 내가 잘못하고 있습니까?
Rahul Vyas

@RahulVyas : 더 명확하게 말해서, 가비지 수집 기능을 해제 하면 좀비가 활성화 될 수 있다고 생각했습니다. 가비지 수집 기능이있는 좀비가 있다고 생각하지 않기 때문입니다. 그래도 문제가 해결되지 않으면 기기 설명서를 읽어 보는 것이 좋습니다 (각 기기에 대해 잘 기록되어 있음). 그래도받지 못한 경우 여기에 질문을 게시하여 더 많은주의를 기울이십시오 (최종 답변). .
Dov

4

Xcode 4.5.2에서 제품-> 구성표 편집->으로 이동하고 진단 탭에서 Objective C와 Enable Zombie Objects 사이의 확인란을 선택하고 OK를 클릭하십시오.


3

좀비 로깅을 활성화하려면 Xcode 프로젝트의 실행 파일 그룹에서 실행 파일을 두 번 클릭하십시오. 이 시점에서 인수 탭을 클릭하고 Variables to be set in the environment:섹션에서 변수를 호출 NSZombieEnabled하고 값을로 설정하십시오 YES.


3

XCode 4.0의 경우 : 인스트루먼트에서 NSZombie를 감지하려면 시뮬레이터를 대상으로 선택하십시오 (장치에서 NSZomboe를 감지 할 수 없음). 인스트루먼트 (CMD + I)를 실행하고 "좀비"트레이스 템플릿을 선택하십시오. 즐겨.


2

실행 파일의 환경 NSZombieEnabled설정에서 환경 변수를 추가 하고 값을로 설정하십시오 YES.


2

ur XCODE (4.3)에서 다음 재생 버튼 :) (실행)

선택 : 구성표 편집

계획 관리 창이 열립니다

인수 탭을 클릭하십시오

당신은 참조해야합니다 : 1- 시작시 전달 된 인수 2- 환경 변수

(2- 환경 변수) 장소 내부 이름 : NSZombieEnabled
값 : 예

그리고 그 일 ....


1

NSZombieEnabled는 BAD_ACCESS 디버깅에 사용됩니다.

Xcode의 스키마 시트에서 NSZombiesEnabled 환경 변수를 활성화하십시오.

Click on Product⇒Edit Scheme to open the sheet and set the Enable Zombie Objects check box

비디오 는 내가 말하려는 것을 보는 데 도움이됩니다.


@kleopatra Thanks 답변을 적절한 설정으로 업데이트했습니다
user2554822
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.