좀비를 사용하여 EXC_BAD_ACCESS 오류를 제거하려고합니다. 0x8955310 :Xcode에서 좀비 사용
객관적인-C 메시지가 주소에 할당이 해제 된 객체 (좀비)에 보내졌다 - 응용 프로그램 충돌이 때 좀비에서
, 나는이 메시지를 받았습니다.
내 질문은 다음 문제 해결을 위해 무엇을해야합니까?
좀비를 사용하여 EXC_BAD_ACCESS 오류를 제거하려고합니다. 0x8955310 :Xcode에서 좀비 사용
객관적인-C 메시지가 주소에 할당이 해제 된 객체 (좀비)에 보내졌다 - 응용 프로그램 충돌이 때 좀비에서
, 나는이 메시지를 받았습니다.
내 질문은 다음 문제 해결을 위해 무엇을해야합니까?
Xcode에서 자신의 구성표에 대한 malloc 스택 로깅과 좀비를 켜고 시뮬레이터에서 앱을 실행하십시오. Xcode는 메시지가 좀비에게 보내질 때 디버거에 들어가야합니다. 디버거 프롬프트에서이 명령을 실행
info malloc 0x8955310
이 (좀비의 실제 주소를 대체!) 당신은 그 주소 할당 및 해제 할 때부터 스택 트레이스를 얻을 수 있습니다.
나는 정말로 어리석은 질문을 가지고있다. 정확히 어디에 malloc_history 명령을 실행해야 하는가? PID 0xADDRESS | 적게. 터미널에? –
gdb의 내장 malloc 히스토리 지원을 사용하기 위해 제 대답을 변경했습니다. –
대부분의 경우 개체를 만들고 릴리스 한 다음 나중에 메시지를 보냈습니다. 이것은 당신이 고려 그것을
사용하여 수행되면, 안전한 연습 nil
에 개체를 설정하는 것입니다 일어나지 않을 것입니다 있는지 확인하기 위해
:
NSMutableArray *a = [NSmutableArray array];
[a dealloc];
[a do_something_weird];
앱 가능성이 충돌입니다 (원 't 항상 크래시)이 메시지에 대한 응답으로, 릴리스 이후에이 메모리를 소유하지 않으며 다른 객체에 의해 사용될 수 있습니다. 당신이
NSMutableArray *a = [NSmutableArray array];
[a dealloc];
a=nil;
[a do_something_weird];
이 순서를 변경하는 경우
정확히 아무것도 일어나지 않습니다. 이것은 개체 사용을 마쳤다고 확신 할 때 따라야 할 안전한 방법입니다.
Automatic Reference Counting 기능을 사용하면 메모리 관리에 많은 도움이됩니다.
가능한 복제본 [Xcode에서 NSZombie를 활성화하는 방법] (http://stackoverflow.com/questions/5386160/how-to-enable-nszombie-in-code) –
질문이 명확하지 않습니다. '문제 해결을 위해 내가해야할 일'은 다양한 방식으로 해석 될 수있다. 다시 말해주세요. – JAM