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?
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. –
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. –
+ 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. –