나는 이것에 2 일을 보냈다. 그리고 나는 아직도 충돌의 원인을 발견 할 수 없다.NSZombie없이 EXC_BAD_ACCESS 추적 중입니까?
해제 된 개체에 액세스하려고 할 때와 관련이 있지만 어떤 액세스 또는 개체를 모르는지 알고 있습니다.
Google에서 EXC_BAD_ACCESS의 소스를 찾으려고 할 때마다 NSZombies를 사용하는 것이 좋습니다. 문제는 좀비 (환경 변수를 통해 xcode 또는 ObjectAlloc 속성을 통해 도구에서 xcode)를 활성화 할 때 문제가 발생합니다. 일반적으로 프로그램이 충돌하지 않고 좀비가 아무 것도보고하지 않습니다 (로그에 아무것도 나타나지 않고 플래그가없는 부분이 있음). 악기). NSZombie에서 누락 된 것이 있습니까?
저는 xcode의 디버거와 Instrument의 ObjectAlloc에서 일부 정보를 활용하려고 시도했지만 모든 정보는 매우 신빙성이 있으며 실제로 도움이되지 않습니다.
나는 objective-c 예외에서 멈추도록 디버거를 설정했습니다. 그것이 수행 할 때 다음과 같은 호출 스택이 표시됩니다.
0 objc_msgSend
1 ??
2 -[UITableViewCell removeFromSuperView]
3 -[UIView dealloc]
... etc ...
우선 '무엇이'? ' ? 의문점은 무엇을 의미합니까? 둘째로 이것이 내 코드에서 어디에서 호출되었는지 어떻게 알 수 있습니까? 명시된 모든 작업은 너무 일반적입니다 (예 : UIView dealloc, UIView 및 Where?).
또한 예외가 발생하면 어셈블리 코드를 가리키며 코드가하는 일을 알아 내려고 노력하지 않는 한 나에게 아무런 도움이되지 않습니다. 나는 약간의 집합을 알고있다. 그러나 거기에 는 더 좋은 길인를 가지고있다. .. 오른쪽?
예외가 발생하기 전에 내 코드에서 실행 된 마지막 줄이 무엇인지 의미있는 정보를 얻을 수있는 방법이 있습니까?
일부 NSLog 및 브레이크 포인트를 뿌리려고했지만 충돌이 발생하기 때문에 많은 도움이되지 않습니다. 이후 탐색 컨트롤러에서보기 컨트롤러가 나옵니다. 어디에서나 중단 점을 잘게 break는 중단 점을 배치합니다 (나는 을 깨고 충돌을 일으킬 수있는 지점을 찾을 수 없습니다). 디버거에서 예외가 발생하는 경우에만 '계속'합니다. 충돌이 내 코드 외부에서 발생하는 것처럼 그것은 어디에서 핸들을 얻는 지 전혀 모릅니다.
나는 내 코드를 조사한 결과, 적어도 내 지식에 따라 모든 메모리 관리 규칙을 준수하는지 확인했다. 나는 그것이 매우 미묘한 뭔가라고 확신하지만 그것을 찾을 수 없을 것입니다.
누군가 NSZombie없이 이러한 버그를 찾는 방법을 알고 있다면 공유하십시오.
감사합니다.
디버그 모드로 실행 해 보셨습니까? 오류가 발생하면 바로 중지해야하며 스택 추적은 오류의 원인이되는 코드 행과 객체로 안내합니다. – Eiko
'디버그 모드'는 무엇을 의미합니까? xcode에서 '빌드 및 디버그'를 의미하고 디버거와 활성 구성 = 디버그를 사용하는 경우 그렇습니다. 제 질문에 언급 된대로 시도했습니다. 문제는 스택 추적이 너무 막연했다는 것입니다 (내 질문에 게시 된 샘플 참조). 내 코드에서 문제가있는 부분을 찾는데 도움이되지 못했습니다. 만약 내가 모르는 다른 디버그 모드에 대해 이야기하고 있다면, 정교하게 말하십시오. 나는 xcode (~ 1 개월)에 상당히 익숙하기 때문에 내가 모르는 기능이있을 수 있습니다. – nebs