2010-06-19 5 views
4

Xcode 프로젝트에서 아키텍처 전환을 시도했습니다. 아직 64 비트로 아직 이식되지 않은 저수준 퀵타임을 사용하고 있었기 때문입니다. 이전에 x86_64에서 컴파일 할 때 내 응용 프로그램은 정상적으로 실행되었습니다. 그런 다음 아치를 i386으로 전환하고 붐을 일으키며 시작시 내 앱이 계속 충돌합니다.i386에서 응용 프로그램이 다운 됨 x86_64에서 작동합니다.

이상한 점은 스택 tracke가 내 코드와 아무 관련이 없다는 것입니다.

#0 0x9929ebf1 in __CFBasicHashDeallocate 
#1 0x99286ea1 in _CFRelease 
#2 0x992b397d in _CFAutoreleasePoolPop 
#3 0x917d1dda in NSPopAutoreleasePool 
#4 0x92b67bc9 in loadNib 
#5 0x92b66f99 in +[NSBundle(NSNibLoading) _loadNibFile:nameTable:withZone:ownerBundle:] 
#6 0x92b66eaa in +[NSBundle(NSNibLoading) loadNibFile:externalNameTable:withZone:] 
#7 0x92b66df5 in +[NSBundle(NSNibLoading) loadNibNamed:owner:] 
#8 0x92b63bf9 in NSApplicationMain 
#9 0x000023c8 in main at main.m:13 

아이디어가 있으십니까?

+0

다른 스레드에서 충돌 할 수 있습니까? –

답변

3

제 생각 엔 당신은 nib에서 32 비트 모드로 안전하지 않은 개체를 만들었습니다. 예를 들어, NSInteger 대신 CGFloat 또는 int64_t 대신 double을 사용하는 것과 같이 사실이 아닌 객체의 크기를 가정 할 수 있습니다.

+0

아이디어를 어떻게 축소 할 수 있습니까? 디버거를 사용하여 코드를 단계별로 실행하려고 시도했지만 사용 가능한 결과가 없습니다 ... 충돌이 발생하는 지점을 찾을 수 없습니다. –

+1

발견! * [update setTitle : @ "update available ➜"]; * 비표준 기호 (화살표)를 사용했기 때문에 * 그것을 추락했습니다. –

+0

@elementer 아마 Apple에 버그를 신고 할 것입니다. ➜ 캐릭터가 펜촉을 넣을 때 충돌이 발생하는 것처럼 보이지 않습니다. 작은 테스트 케이스 (예 : 윈도우의 레이블 또는 다른 것)로 간단하게 만들 수 있습니까? 코드에서'setTitle :'이라도 제대로 작동합니까? –

관련 문제