2010-02-04 3 views
3

iPhone SDK 3.1.2, Mac OS X 10.5.8,iPhone OCUnit, 코드 139가 비정상적으로 종료되었습니다. 무엇입니까?

OCUnit을 사용하는 초보자는 iPhone SDK와 함께 제공됩니다. 내가 얻을 수있는 유일한 오류는 다음과 같습니다

오류 : 테스트 장비 '/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.2.sdk/Developer/usr/bin/otest가'코드 139 비정상적으로 존재 (추락했을 수 있음).

누구인지 알고 있습니까? 감사.

편집 : 원인을 찾았습니다. 나는 단위 테스트를 작성한 클래스의 -dealloc에 ​​매우 멍청한 코드를 넣었다. 이처럼 : 때때로

- (void)dealloc { 
    [someObject1 dealloc]; //wtf, dealloc? 
    [someObject2 dealloc]; //wtf, dealloc? 
    [super dealloc]; 
} 

그리고 이것이 내가 본 적이 가끔 코드 139, 138

+0

코드 139는 일반적인 "AGH SOMETHING WENT WRONG"코드이므로 테스트 중에 충돌이 발생하여 관련 코드를 게시 할 수 있습니까? –

+0

감사합니다. Dave. 이 코드에 대한 자세한 정보는 어디에서 찾을 수 있습니까? 나는 "아이폰 코드 139"봤는데, 가장 상단 링크 내 질문입니다. :) – yehnan

답변

3

의 원인이됩니다, 그것은 보통 내 유닛 테스트의 일단 잘못된 논리를 가지고 있으며, 충돌 otest가 발생했습니다 것을 의미한다 . 이것은 코드 139가 굉장히 유용한 오류 코드가 아니기 때문에 대단히 도움이되는 대답은 아닙니다. 죄송합니다!

+0

실례합니다. "잘못된 논리"란 무엇을 의미합니까? – yehnan

+0

@yehnan - 개체를 과도하게 사용하고 충돌을 일으키거나 null 포인터를 역 참조하는 것과 같은 것입니다. –

+0

감사원은 말씀대로. – yehnan

1

OCUnit이 코드 139와 충돌하면 실제로 아무것도 될 수 있습니다. 일반적으로이 오류 코드는 컴파일 타임 오류가 아닌 런타임 오류이기 때문에 발생합니다. 그래서 컴파일러가 괜찮은 일을하고 있지만 런타임에는 실패합니다.

이런 일이 발생했을 때 살펴보아야 할 몇 가지 사항이 있지만 실제로는 이보다 더 복잡 할 수 있습니다.
1. dealloc/alloc 영역을 확인하십시오. 이러한 객체가 실제로 존재하는지/올바르게 호출되는지 확인하십시오.
2. 맞춤법, 오타 등을 확인하십시오. 두 개의 변수는 비슷하게 이름이 지정되었지만 잘못 사용 되었습니까? 캐스트 :
3. 테스트를 격리하여 테스트하십시오. OCUnit이 코드 문제로 인해 충돌합니다.
4. 그 밖의 모든 것이 실패하면 코드가 OCUnit 대신 시뮬레이터를 대상으로합니다. 그렇게 의미있는 느슨한 추적을 얻을 수 있습니다.

관련 문제