2014-05-23 1 views
0

저는 숙련 된 프로그래머 (일반적으로 &, 특히 Cocos2D)의 조언을 받아 여기에 게시하고 있습니다.컴파일러 경고없이 Cocos2D v2.1 및 arm64가 충돌합니다.

저는 몇 곳에서 Cocos2D v2.1을 사용하는 예전 프로젝트가 있습니다. 그렇지 않으면 표준 UIKit입니다. 나는 arm64와 호환되도록 업데이트했기 때문에 모든 컴파일러 경고를 제거하고 시뮬레이터에서 성공적으로 응용 프로그램을 실행할 수있었습니다. 그러나, 나는 방금 iPad Air 사용자로부터 Cocos2d 부분이 충돌한다는 버그 보고서를 받았습니다.

Exception Type: EXC_BAD_ACCESS (SIGSEGV) 
Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000000000010 
Triggered by Thread: 0 

Thread 0 Crashed: 
0 libobjc.A.dylib     0x00000001995101d0 0x1994f8000 + 98768 
1      0x000000010014e820 -[CCTimer update:] + 152 
2      0x0000000100152140 -[CCScheduler update:] + 420 
3      0x000000010016ab30 -[CCDirectorIOS drawScene] + 172 

내가 말처럼,이 시뮬레이터에는 컴파일러 경고 및 모든 작품은, 그래서 내가 좀 그것을 해결하는 방법에 같이 붙어 있어요. 나는

그러나, 나는 단지 응용 프로그램의 작은 부분에 대한적인 Cocos2D를 사용하는 일반적인 두 가지 옵션이 1. 제거 arm64 2. 업그레이드적인 Cocos2D에 3.0로 될 것을 알고, 그래서 나는 아마도 내가 것으로 기대했다 간단한 수정이 누락되었습니다. 나는 Cocos2D에 익숙하지 않고 일반적으로 디버깅을하기 때문에 약간의 충고를 원한다면 잃어버린 원인이되고 다른 두 가지 옵션 중 하나에 시간을 보내야한다. 아니면 내가 할 수있는 간단한 것이있다. 나는 지금 당장 놓치고있다. 나는 CCTimer update: 메서드를 통해 살펴 보았고, 코드에서 약간의 수레가 돋보였습니다. 32/64 비트 사이에서 문제가 될 수 있지만 컴파일러 경고 없이는 손실이 발생했습니다.

UPDATE는 그래서 mysteriouser 및 mysteriouser을 가져옵니다. 나는 새로운 iPad Air를 시뮬레이터 대신 로컬에서 테스트하기 위해 구입했으며, 작동한다. 충돌 없음. 사용자가 단순히 결함이있는 장치를 가지고 있습니까? 나는 예외가 다소 이상하게 보인 KERN_INVALID_ADDRESS at 0x0000000000000010에 던져진 것을 알아 차렸다. 온라인에서 본 대부분의 유사한 충돌 보고서에는 완전히 다른 주소가있어 훨씬 더 무작위로 보입니다.

업데이트 2

더 신비. 로컬 버전이 장치 (XCode를 통해 실행)에서 작동하는 동안 AppStore에서 실제로 다운로드 한 응용 프로그램이 충돌합니다! Device Logs에서 더 자세한 정보를 얻을 수있었습니다 :

Exception Type: EXC_BAD_ACCESS (SIGSEGV) 
Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000000000010 
Triggered by Thread: 0 

Thread 0 Crashed: 
0 libobjc.A.dylib     0x0000000196c041d0 objc_msgSend + 16 
1     0x00000001001da820 -[CCTimer update:] + 152 
2     0x00000001001de140 -[CCScheduler update:] + 420 
3     0x00000001001f6b30 -[CCDirectorIOS drawScene] + 172 
4 QuartzCore      0x000000018cf40cb8 CA::Display::DisplayLinkItem::dispatch() + 32 
5 QuartzCore      0x000000018cf40ac4 CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) + 296 
6 IOKit       0x000000018b23be70 IODispatchCalloutFromCFMessage + 360 
7 CoreFoundation     0x000000018a2ec8dc __CFMachPortPerform + 188 
8 CoreFoundation     0x000000018a2fae8c __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52 
9 CoreFoundation     0x000000018a2fadec __CFRunLoopDoSource1 + 440 
10 CoreFoundation     0x000000018a2f9010 __CFRunLoopRun + 1616 
11 CoreFoundation     0x000000018a239c1c CFRunLoopRunSpecific + 448 
12 GraphicsServices    0x000000018fec9c08 GSEventRunModal + 164 
13 UIKit       0x000000018d36afd8 UIApplicationMain + 1152 
14     0x00000001000f4994 main (main.m:16) 
15 libdyld.dylib     0x00000001971e7a9c start + 0 

Thread 1: 
0 libsystem_kernel.dylib   0x00000001972c9aa8 kevent64 + 8 
1 libdispatch.dylib    0x00000001971cd998 _dispatch_mgr_thread + 48 

Thread 2: 
0 libsystem_kernel.dylib   0x00000001972c9ca0 mach_msg_trap + 8 
1 CoreFoundation     0x000000018a2fab70 __CFRunLoopServiceMachPort + 180 
2 CoreFoundation     0x000000018a2f8d00 __CFRunLoopRun + 832 
3 CoreFoundation     0x000000018a239c1c CFRunLoopRunSpecific + 448 
4 AudioToolbox     0x0000000189aedabc GenericRunLoopThread::Entry(void*) + 156 
5 AudioToolbox     0x0000000189ade278 CAPThread::Entry(CAPThread*) + 136 
6 libsystem_pthread.dylib   0x0000000197363e18 _pthread_body + 164 
7 libsystem_pthread.dylib   0x0000000197363d70 _pthread_start + 136 
8 libsystem_pthread.dylib   0x0000000197361550 thread_start + 0 

Thread 3: 
0 libsystem_kernel.dylib   0x00000001972e2e74 __workq_kernreturn + 8 
1 libsystem_pthread.dylib   0x0000000197361548 start_wqthread + 0 

Thread 4: 
0 libsystem_kernel.dylib   0x00000001972e2e74 __workq_kernreturn + 8 
1 libsystem_pthread.dylib   0x0000000197361548 start_wqthread + 0 

당황했습니다.

+0

현재 프로젝트에서 arm64를 지원하기 위해 프로젝트를 변환하는 데 좋은 WWDC 비디오가 있습니다.이 비디오는 arm64 지원과 관련이있는 것으로 추측됩니다.그 원인을 알기 위해 arm64 지원을 제거해 보았습니까? –

답변

1

컴파일러 경고/오류가 발생하지 않아도 v3 이전의 cocos2d-iphone이 64 비트 빌드와 호환되지 않기 때문에 확실히 프로젝트 빌드 설정 (아키텍처, 유효한 아키텍처)에서 arm64를 제거하십시오. 잠재적으로 숨겨진 몇 가지 문제가 숨겨져 있습니다.

컴파일러 경고 메시지가 표시되지 않으면 32/64 비트 호환성 문제 경고가 프로젝트/대상 (특히 별도의 대상에있는 경우 cocos2d-iphone 대상)에서 사용 설정되지 않았을 가능성이 높습니다. cocos2d의 재고 v2.1에는 실제로 iOS 배포 대상에 따라 달라질 수 있지만 이러한 경고가 많이 있어야합니다 (테스트를 위해 iOS 7.1로 설정하면 많은 "사용 중단"경고를 포함하여 대부분의 경고가 표시됩니다) .

잠재적 인 문제 (및 일부 잘못된 경고)를 지적하기 위해 분석 빌드를 수행 할 수도 있습니다.

+0

경고가 사용됩니다. 나는 여기에서 그리고 웹에서 몇몇 끝을 사용하여, 하나씩 차례로 나 자신을 제거했다. 그리고 네, 7.1 프로젝트의 대상입니다. 심지어 분석을 실행하여 더 많은 정보를 얻을 수 있는지 확인했지만 그렇지 않습니다. 그리고 시뮬레이터에서 잘 돌아갑니다. – user1459524

+0

죄송합니다. 내 코멘트의 일부를 삼킨 것으로 나타났습니다. 나는 Analyze가 나에게 의미있는 것처럼 보이지 않는 것을 보여주지 않는다고 말하고 있었다. 여기서는 cocos2d-ios.xcodeproj 하위 프로젝트에 몇 가지 경고가 표시되지만 그보다는 이전과 다르지 않은 것으로 보입니다. 특히 64 비트 정보가 중요하다는 점은 두드러지지 않습니다. 음, 어쨌든 나에게 그런 것은 아니지만, 내가 말했듯이, 나는 꽤 멍청하다. – user1459524