2011-03-30 3 views
10

LLVM 2.0으로 Xcode 4.0.1에서 응용 프로그램을 빌드하려고 할 때 레벨 또는 최적화가 아닌 (-O0 이외의) 최적화가 완료되면 응용 프로그램이 충돌합니다. 내가 장치에서 실행 (시뮬레이터는 괜찮아). xcode를 빌드하고 GDB/LLDB를 통해 연결할 때 충돌이 디버깅되지 않는 것 같습니다. 또한, xcodebuild를 사용하여 명령 줄에 응용 프로그램을 빌드 할 때만 충돌이 발생합니다. XCode IDE를 통한 빌드는 정확히 동일한 프로젝트 설정으로도 충돌하지 않습니다. .LLVM 및 임의 최적화를 사용하여 빌드하면 시작시 응용 프로그램이 충돌합니다.

Exception Type: EXC_BAD_ACCESS (SIGBUS) 
Exception Codes: KERN_PROTECTION_FAILURE at 0x00b53400 
Crashed Thread: 0 

Thread 0 name: Dispatch queue: com.apple.main-thread 
Thread 0 Crashed: 
0 ???        0x00b53400 0 + 11875328 
는 충돌에서 발생하는 라이브러리를 알 수 없기 때문에 제대로 symbolicate하지 않습니다

: 충돌이 내 코드 이외의 발생으로 나는 충돌 로그에 유용한 정보를 볼 수 없습니다

디바이스 콘솔은 우리 앱이 시작할 때 만들어지는 NSLog 문을 보여 주며, 첫 번째 화면의 UI가로드되고 그려지고 그 후에 충돌이 발생합니다. 최적화없이 구축하거나, GCC 4.2로 최적화 된 최적화 레벨로 구축하는 것이 좋습니다.

여기서 어떤 일이 벌어 질 수 있으며 어떻게 디버깅 할 수 있습니까? xcodebuild가 xcodebuild 명령 줄 인터페이스와 비교하여 응용 프로그램을 빌드하고 배포 할 때 XCode IDE가 다르게 수행 할 수있는 작업은 무엇입니까?

답변

1

(독일어) 업그레이드.

Google에서이 문제를 해결했습니다 (최적화가 설정된 ARMv6에서는 시작되지 않지만 ARMv6에서는 시작되지 않음).

+1

조금 더 많은 색상. Xcode 3.2.x-4.0.1이 설치된 LLVM 1.6-2.0은이 충돌을 일으키는 코드를 생성 할 수 있습니다. 또한 최적화 수준이 아무런 영향을 미치지 않는 것으로 보입니다. -O0 이상의 결과가 발생합니다. –

+3

다른 대안은 조건부로 -O0을 ARMv6 용으로 빌드하고 ARMv7에서는 -Os 또는 사용하는 모든 것을 그대로 둡니다. Xcode 4.x에서이를 수행하려면 타겟의 빌드 설정에서 "최적화 레벨"옆의 플러스를 클릭 한 다음 특별한 경우 인 ARMv6을 클릭하십시오. Xcode가 자동으로 변경 사항을 적용하지 않는 것으로 보아 이후에 정리하고 다시 컴파일해야합니다. –

+0

+ BenLachman은 아키텍처 별 조건부 최적화에 대한 환상적인 팁이지만, 그렇게 할 수 있는지 전혀 몰랐습니다. 앞으로는 -O0을 사용하여 ARMv6 코드를 모두 빌드 할 수 있습니다. iPhone 3G 장비를 사용하는 고객의 비율은 적으며 성능 손실은 안정성의 향상으로 인해 크게 상회합니다. –

9

Google 앱에서도 동일한 문제가 발생했습니다. Release/Distribution 빌드에서 armv6 코드에만 영향을 받아 iPhone 3G와 iPod Touch 2G 만 영향을받습니다. 그러나 설명과는 달리 Xcode를 사용하면 재현이 가능합니다 (우리는 xcodebuild를 사용하지 않습니다).

분명히 생성 된 코드가 스택 포인터를 손상시킵니다. 따라서 실제로 디버깅 할 수는 없으며 오류 로그는 쓸모가 없습니다. 디버거를 사용하면 viewWillAppear :의 애니메이션이 표시되어야합니다. 하지만 그 후에는 앱이 항상 추락했습니다.

이전 컴파일러로 전환하면 문제가 해결되었습니다.

나는 Apple에 버그를 제출했습니다. 버그의 우선 순위가 높아 지므로 파일 하나를 보내주십시오.

같은 문제를보고 더 많은 사람들이있다 : 엑스 코드 4.0.2에

+0

그건 이상한 일입니다. 제 동료들과 저는 iPad와 iPhone 3gs에서 이런 일이 일어나는 것을 보았 기 때문에 이상합니다. 설명을 주신 덕분에 – Kevlar

+1

. 나는 똑같은 문제를 겪고있다. 나는 또한 재현 할 수 있고 확인할 수있다. iPhone 3G 장비에서 XCode 4.0 (업그레이드 시간!) 및 iOS 3.1을 실행 중입니다. 내 빌드 설정은 최적화가 "가장 빠름, 최소"로 설정된 LLVM 2.0입니다. @Kevlar가 제시 한대로, 지금까지 시도한 모든 설정에서 "None"이외의 다른 최적화로 인해 응용 프로그램이 중단됩니다. – makdad

+1

다른 컴파일러 (gcc 또는 gcc-llvm)를 사용하는 경우에도 -O0보다 높은 최적화 수준에서 Xcode 4.1과 동일한 문제가 발생합니다. –