문제

내가 설정했을 때 NSZombieEnabled = Yes 콘솔에는 아무것도 기록되지 않습니다. 이것을 어떻게 고칠 수 있습니까? 아니면 다른 도구를 조언 할 수 있습니까? EXC_BAD_ACCESS?

도움이 되었습니까?

해결책

당신은 평범한 사고가 있습니다. exc_bad_access는 응용 프로그램이 유효하지 않은 메모리 주소에 액세스하려고 시도했음을 의미합니다. GC'D Objective-C 응용 프로그램에서 이것에 대한 가장 일반적인 이유는 거래 후 객체를 메시지로 표시하는 것이지만, 좀비 모드가 감지하는이 특정 충돌은 다른 여러 가지 방법으로 발생할 수 있습니다 (입증 된 바와 같이).

애플리케이션이 충돌 하므로CARCOLTRACE가 있어야합니다. 우리 중 누구라도 당신을 더 도울 수 있도록 여기에 그 백 트레이스를 게시해야합니다.

Brad가 말했듯이 디버깅 활성화로 응용 프로그램을 실행하십시오. Xcode에는 "런/디버그"메뉴 항목이 "실행"메뉴 아래에 있습니다. 그것을 사용하십시오. 응용 프로그램이 충돌하면 디버거 창의 왼쪽 상단에 스택 추적이 표시됩니다.

아니요, 실제로 그들은 디버거에 나타납니다. 사진은 1,000 단어의 가치가 있습니다.alt text
(원천: 금요일.com)

다른 팁

"exc_bad_access"가 반드시 좀비 인스턴스와 관련이있는 것은 아닙니다. 로컬 변수와 같이 정의되지 않은 참조에 대한 액세스를 연결할 수 있습니다.

NSArray *array;
[array objectAtIndex:0]; // <- Will throw an error

편집하다:NSZOMBIE FLAG는 해체 된 인스턴스를 사용하여 트리거 된 "exc_bad_access"를 해결하는 데 도움이됩니다.

버그를 풀려면 충돌 백 트레이스를 사용하여 잘못된 위치를 정확히 찾아야합니다. 그런 다음 코드로 돌아가서 모든 과제 및 할당을 확인하십시오.

또한 사용하기 전에 모든 포인터를 nil로 초기화해야합니다!

포인터를 NIL이나 다른 객체로 초기화하지 않고 포인터를 사용하는 경우, 귀하는 자신이 아닌 메모리에 액세스 할 수있을 것입니다.

예를 들어 다음 코드는 마지막 줄로 인한 nszombieenabled 플래그를 사용하여 추적 할 수없는 exc_bad_access도 제공합니다.

RecordingLocation* closest;

//find the closest recording location
for (...)
{
    //try to find the closest object...
    //suppose we don't find anything so closest is never set.
}

if (closest!=nil)
    NSLog(@"Closest: %f,%f",closest.x,closest.y);

이 질문에 대한 답이 실제로 질문에 어떻게 대답하는지 이해가 안 돼요 ..

나는 나 자신에게 똑같은 것을 요구하고있다. xcode4를 사용하여 exc_bad_access와 충돌하는 대신 릴리스 된 객체에 액세스 할 때 nszobmieenabled = 예를 절단 할 수있었습니다.

당면한 질문은 다음과 같습니다.

"nszombieenabled = 예를 설정하면 아무것도 콘솔에 기록되지 않습니다. 어떻게 해결할 수 있습니까?"

간단하고 간단합니다.

나는 같은 문제를 경험하고 있습니다. Xcode는 디버거로 정지하지만 콘솔은 메시지를 생성하지 않습니다. 나는 다음의 선을 따라 무언가를 기대할 것이다.

"메시지가 처리 된 인스턴스로 전송되었습니다 ...".

당신입니다 exc_bad_access에 대한 검색 스택 오버플로, 당신은 당신이 가진 것과 같은 문제를 가진 많은 사람들을 찾을 수 있습니다. 당신이 이것에 부딪히는 대부분의 시간은 메모리 문제를 겪고 있습니다. 설명 된 프로토콜을 따르는 경우 여기 또는 여기, 그리고 콘솔에서 릴리스 된 객체로 전송 된 메시지에 대한 보고서가 보이지 않으므로 다른 것일 수 있습니다.

디버거 (run | debug- 브레이크 포인트 켜기)에서 응용 프로그램을 시작해 보셨습니까? exc_bad_access에 도달하자마자 디버거가 중단되어야합니다. 디버거 (run | debugger)에 표시된 백 트레이스를 보면 오류가 발생한 위치가 표시 될 수 있습니다.

NSZOMBIEENABLED가 작동하지 않고 이것을 쳐다 보면서 행복한 20 분을 방금 보냈을 때, 나는 이것을 추가 할 것이라고 생각했습니다.

NSArray *arr = [NSArray arrayWithObjects:@"@dog","@cat",nil];

두 번째 매개 변수에서 누락 된 '@'에 주목하십시오. 나는하지 않았다 :-)

exc_bad_access에 대해 다른 경험이 있었으므로 공유하고 싶습니다.

질문에 명시된 바와 같이, nszombieenabled가 확인되었지만 콘솔에는 아무것도 기록되지 않았습니다. 시뮬레이터에서 몇 시간 동안 어려움을 겪은 후 장치에 설치하기로 결정했습니다. 장치로 디버깅으로 얻은 오류 메시지가 더 도움이되었습니다.

결국, 나는 exc_bad_access 오류와 이상한 행동을 받고 있음을 알았습니다. 이름이 바뀌었다 몇 가지 xib 파일 하루 전. MainWindow.xib 파일의 'View Controller'객체를 선택하고 수정했습니다. 펜촉 이름 재산. 그런 다음 모든 것이 순조롭게 작동했습니다.

NSZOMBIE ENABLE에 의해 모든 exc_bad_access가 발견되는 것은 아니라고 생각합니다.
일부 경우는 좀비를 사용하는 동안 결과를 얻지 못하기 때문에 ..
릴리스 된 객체의 사용과 관련된 exc_bad_access 만 좀비를 활성화하여 볼 수 있다고 생각합니다.

좀비를 사용하는 동안 언급 한 한 가지 더 문제는 다음과 같습니다. 때로는 디버그에 충돌이 발생합니다. 내가 잡은 한 가지 사례는 추락하여 다음을 보여 주었다.
*** -[MagazineWebview respondsToSelector:]: message sent to deallocated instance 0x58ce2a0
Nszombie를 활성화 할 때만 발생합니다.

내가하고있는 일은
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
현재 "MagazineWebView"객체를 해제하고 주어진 [요청 URL]을 다른 "MagazineWebView"객체에로드합니다. 내 기능을 달성하기 위해 ...

감사해요

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top