2012-04-25 3 views
2

프로젝트를 XCode 4.3.1에 ARC 용으로 작성 했으므로 카운트가 전혀 유지되지 않습니다. 시뮬레이터 나 장치에서 프로젝트를 실행하면 정상적으로 실행됩니다. 할당 및 누수에 대한 프로파일 러에서 실행하면 정상적으로 실행됩니다. 내가 프로젝트를 보관하고 특별 그것을 배포하고 .ipa 파일을로드하는 경우아이폰 앱이 디버그되지 않은 릴리스 버전

그러나 앱이 콘솔 메시지와 충돌합니다 :

<Notice>: Quilters_AppP(1812,0x3f85cd98) malloc: *** error for object 0x1109a910: pointer being freed was not allocated 
<Notice>: *** set a breakpoint in malloc_error_break to debug 

을 오류가 발생하기 때문에 나는 malloc_error_debug에 중단 점을 설정하지만, 출시 된 버전에서는 디버거가 표시되지 않습니다.

정말 이상한 곳이 있습니다. NSLog 문을 추가 했으므로 문제가 재현되지 않습니다.

Exception Type: EXC_CRASH (SIGABRT) 
Exception Codes: 0x00000000, 0x00000000 
Crashed Thread: 0 

Thread 0 name: Dispatch queue: com.apple.main-thread 
Thread 0 Crashed: 
0 libsystem_kernel.dylib   0x34f5432c __pthread_kill + 8 
1 libsystem_c.dylib    0x36e50208 pthread_kill + 48 
2 libsystem_c.dylib    0x36e49298 abort + 88 
3 libsystem_c.dylib    0x36e0437a free + 374 
4 libobjc.A.dylib     0x36583d72 object_dispose + 14 
5 CoreFoundation     0x350b6618 -[NSObject dealloc] + 76 
6 CoreFoundation     0x350b6736 -[__NSArrayI dealloc] + 162 
7 libobjc.A.dylib     0x3658316e _objc_rootRelease + 30 
8 libobjc.A.dylib     0x36584e50 objc_release + 32 
9 libobjc.A.dylib     0x36583ea6 (anonymous namespace)::AutoreleasePoolPage::pop(void*) + 218 
10 libobjc.A.dylib     0x36583dc2 _objc_autoreleasePoolPop + 6 
11 CoreFoundation     0x350b0cf8 _CFAutoreleasePoolPop + 12 
12 UIKit       0x3218ee34 _wrapRunLoopWithAutoreleasePoolHandler + 36 
13 CoreFoundation     0x35134b14 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 12 
14 CoreFoundation     0x35132d50 __CFRunLoopDoObservers + 252 
15 CoreFoundation     0x351330aa __CFRunLoopRun + 754 
16 CoreFoundation     0x350b649e CFRunLoopRunSpecific + 294 
17 CoreFoundation     0x350b6366 CFRunLoopRunInMode + 98 
18 GraphicsServices    0x363b2432 GSEventRunModal + 130 
19 UIKit       0x321ace76 UIApplicationMain + 1074 
20 Quilters_AppP     0x0003505c main (main.m:17) 
21 Quilters_AppP     0x00034af4 0x33000 + 6900 

날이 어려운 버그를 잡을 도와주세요 : 여기

로그입니다. 이 앱은 4.3/armv7을 타겟으로합니다.

+2

자동 해제 풀에있는 개체를 놓아두고 오류가 발생했습니다. 어딘가에, 당신은 객체에 대해 'autorelease'를 사용하고 있고,'release'를 호출하고 있습니다. NSZombies가 활성화되거나 유사 할 수 있기 때문에 DEBUG에서 충돌하지 않을 수 있습니다. – MarkPowell

+0

Mark 고맙지 만, Apple이 main.m에서 autoreleasepool을 제공하는 곳을 제외하고 어디에서나 release 나 autorelease를 사용하지 않습니다. - Dan –

+0

이 프로젝트는 ARC를 사용하고 있습니까? – MarkPowell

답변

1

중단 점을 설정하고 프로젝트의 릴리스 빌드 설정 (종종 디버그 빌드 설정과는 다른)을 사용하여 iOS 앱을 디버그 할 수 있습니다. 이렇게하려면 빌드 설정 또는 실행/테스트 구성표 중 하나를 수정하십시오. 그런 다음 클린, 빌드 및 장치 디버그.

+0

고마워요.하지만 (.ipa 파일에 필요한) 아카이브 용 디버그를 사용하도록 구성표를 편집하면 앱이 내 iPhone에 설치되지 않습니다. - Dan –

+0

반대로, lldb 또는 gdb에서 릴리스 빌드를 실행하십시오. – hotpaw2

+0

그게 나에게 이런 걸 가져다 준다 : 오류 : 실행에 실패했다 '/Users/danselig/Library/Developer/Xcode/DerivedData/Quilters_AppP-cjxjnypyjdgyryfuihmreaubguvu/Build/Products/Release-iphoneos/Quilters_AppP.app/Quilters_AppP'- 작업을 가져 오지 못했습니다. for process 2085 –

0

문제는 응용 프로그램 코드가 아니라 컴파일러 코드에있는 것으로 보입니다. 오류는 ARC 사전 컴파일러 또는 컴파일러 자체에서 발생해야합니다.

0

이것은 컴파일러 오류입니다. 특히 최적화에서. 테스트 코드가 최적화되지 않았으며 릴리스 코드가 "가장 빠르거나 작음"으로 최적화되었습니다. 출시 버전 최적화를 제거하면 문제가 해결되었습니다.

이 관리 오브젝트 컨텍스트 액세스이다 트리거 애플리케이션 코드 ... 이중 루프 내에서 수행된다

- (NSArray *) fetchForGroup:(Group *)group 
{ 
    NSArray *array = [group.polygons allObjects]; 
    return array; 
} 

. 조건이 내부 루프에서 충족되면 함수는 "return"을 통해 종료됩니다. 이 호출의 배열은 double-freed입니다. - Dan

1

비슷한 문제가있었습니다. 귀하의 이중 루프는 정확하게 내 설명했다. 두 개의 while 루프 사이에 중첩 된 배열을 정의했습니다. 디버그 모드에서는 괜찮 았지만 릴리스 용으로 빌드 된 경우 정확한 오류로 인해 충돌했습니다.

Xcode 4.xx에서 문제가되는 파일의 컴파일러 플래그에 -O0을 추가 할 수 있습니다 (프로젝트 설정 -> 빌드 단계 -> 소스 컴파일). 그러면 컴파일러 최적화가 해제됩니다 그 하나의 파일에 대해서만. 나를 위해 매력처럼 일했습니다.

드루

+0

이것은 당신이하고 싶은 것이 아닙니다. DEBUG 빌드로 인해 깨지지 않았기 때문에 결국에는 깨지지 않을 것입니다. 당신은 객체를 넘기고있는 버그가 있습니다. ARC로 이동하거나 메모리 관리에 익숙해 지십시오 (ARC에도 적용됨). –

관련 문제