2011-03-30 9 views
10

Cuando intento crear mi aplicación con LLVM 2.0 en XCode 4.0.1 y cualquier nivel u optimización que no sea ninguno (excepto 0), la aplicación falla después de Lo lanzo en el dispositivo (el simulador está bien). Parece que no puedo depurar el bloqueo ya que no ocurre cuando construyo xcode y lo conecto a través de GDB/LLDB. Además, el bloqueo solo ocurre cuando construyo la aplicación en la línea de comando con xcodebuild; construir a través de XCode IDE no falla incluso con la misma configuración de proyecto. No puedo ver ninguna información útil en los registros de errores, como el accidente ocurre fuera de mi código:.Construir con LLVM y cualquier optimización hace que la aplicación se cuelgue al iniciar

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 

No será symbolicate correctamente, ya que no sabe qué biblioteca del accidente ocurrido en

La consola del dispositivo muestra algunas declaraciones NSLog que hace nuestra aplicación al inicio, luego se carga y dibuja la IU de la primera pantalla, y luego se produce el bloqueo. Construir sin optimizaciones o construir con GCC 4.2 con cualquier nivel de optimización funciona bien.

¿Qué podría estar pasando aquí, y cómo puedo depurarlo? ¿Qué podría hacer XCode IDE de forma diferente cuando construye y despliega la aplicación frente a la interfaz de línea de comandos de xcodebuild?

Respuesta

1

Promueve a Xcode 4.0.2.

Solucionó este problema (crash on launch for ARMv6 but not ARMv7 with optimization on turned) para nosotros.

+1

Para un poco más de color. Parece que LLVM 1.6-2.0 con Xcode 3.2.x-4.0.1 puede producir código que tiene esta falla. Además, el nivel de optimización parece no tener ningún efecto en absoluto, nada más que -00 hará que suceda. –

+3

La otra solución es construir condicionalmente -O0 para ARMv6 mientras deja ARMv7 construir con -Os o lo que sea que use. Para hacer esto en Xcode 4.x haga clic en el signo más al lado de "Nivel de optimización" en la configuración de compilación de su objetivo y luego en el caso especial ARMv6. Asegúrese de limpiar y volver a compilar después de esto ya que Xcode no parece recoger el cambio automáticamente. –

+0

+ BenLachman es un consejo fantástico acerca de la optimización condicional basada en la arquitectura, no tenía idea de que pudieras hacer eso. En el futuro, puedo construir todo mi código ARMv6 con -O0 - solo quedan un pequeño porcentaje de clientes con dispositivos iPhone 3G y las pérdidas en el rendimiento son superadas por las ganancias en la estabilidad en mi humilde opinión. –

9

Hemos tenido el mismo problema con nuestra aplicación. Solo afectó armv6 código en las versiones Release/Distribution y, por lo tanto, solo el iPhone 3G y el iPod Touch 2G. Pero al contrario de su descripción, fue reproducible con XCode (no usamos xcodebuild).

Obviamente, el código generado corrompe el puntero de la pila. Como consecuencia, no puedes depurarlo realmente y los registros de fallos no tienen valor. Con el depurador, podría detenerse en viewWillAppear: animado de la primera vista que debe mostrarse. Pero rápidamente después de eso, la aplicación siempre se bloqueó.

El cambio a un compilador anterior resolvió el problema.

He archivado un error con Apple. Por favor, presente uno también ya que se dice que aumenta la prioridad del error.

hay más personas que reportan el mismo problema:

+0

Eso es extraño, ya que mis compañeros de trabajo y yo lo hemos visto en el iPad y en mi iPhone 3gs también. – Kevlar

+1

gracias por la aclaración. Estoy teniendo el mismo problema. Puedo reproducirme también y puedo confirmarlo. Estoy ejecutando XCode 4.0 (¡vaya momento para actualizar!) Y iOS 3.1 en un dispositivo iPhone 3G. Mi configuración de compilación es LLVM 2.0 con el conjunto de optimización "Más rápido, más pequeño". La aplicación se bloquea con CUALQUIER optimización que no sea "Ninguna", hasta ahora con cada configuración que he probado, como sugiere @Kevlar. – makdad

+1

Mismo problema con XCode 4.1, incluso con otros compiladores (gcc o gcc-llvm), para cualquier nivel de optimización superior a -O0. –

Cuestiones relacionadas