ios - change - El ''Nombre del proyecto'' se compiló con optimización: los pasos pueden comportarse de manera extraña; las variables pueden no estar disponibles
ionic colors (13)
¿Está seguro de que su configuración de depuración no optimiza el código (no debería)? Parece que accidentalmente has habilitado optimizaciones para la configuración de depuración y deberías desactivarlo desde la configuración del objetivo.
Intentar ingresar al código de AFNetworking genera la siguiente advertencia:
[Project Name] was compiled with optimization - stepping may behave oddly; variables may not be available.
Y, por supuesto, no puedo depurar el código.
Para ser específico, estoy tratando de depurar la categoría
UIImageView+AFNetworking
que parece imposible.
Cambiar el código no tiene ningún efecto (intentado
NSLog
, etc.) y cuando intenta
NSLog
a los compiladores va al código de ensamblaje y muestra
UIImageView+TVASTAFNetworking
como nombre de categoría que no existe en ninguna parte de la base del código.
Uso de Xcode 7. iOS 9 y 8. Cocoapods (sin marco)
ACTUALIZACIÓN
Olvidé mencionar que Optimizer está configurado en
none
para la configuración de lanzamiento y depuración y, de hecho, estoy usando la configuración de
Debug
.
ACTUALIZACIÓN 2
Strip Debug Symbols
está desactivado.
En caso de que alguien se enfrente a este problema mientras depura un pod que usa una biblioteca C internamente, hay otra cosa que debe cambiar en la configuración del proyecto para que funcione además de todo lo demás enumerado en el hilo.
Vaya a la configuración del proyecto Pods -> Su objetivo de uso de C -> Configuración de compilación -> Apple Clang - Indicadores de compilador personalizados -> Otros indicadores de C y elimine el indicador
-O3
que llegó allí de alguna manera.
Esta advertencia solo aparece cuando alcanza un punto de interrupción y la fuente está en un proyecto donde la optimización está habilitada, evitando que vea valores de variables reales (cada objeto se muestra como nulo, incluso si no lo está)
En mi caso, solo sucedió al depurar paso a paso a través de una dependencia de cocoapod.
Por lo tanto, incluso si tiene su objetivo principal y la configuración del proyecto configurados correctamente (Símbolo de depuración de tira = DESACTIVADO y Nivel de optimización Ninguno), debe asegurarse de que sea el mismo para el proyecto Pod desde el que está llegando al punto de interrupción.
Esta fue la solución para mí ...
En la línea de la respuesta de gimino, si está utilizando cocoapods, agregue una línea como esta al Podfile:
xcodeproj ''MyProject'', ''Debug - local''=>:debug, ''Debug - staging''=>:debug, ''Debug - PRODUCTION''=>:debug
o para versiones de cocoapods> = 1.0 (gracias Diejmon)
project ''MyProject'', ''Debug - local''=>:debug, ''Debug - staging''=>:debug, ''Debug - PRODUCTION''=>:debug
Donde MyProject tiene ''Debug - local'', ''Debug - staging'', ''Debug - PRODUCTION'' como configuraciones de depuración además del estándar ''Debug''
Por defecto, los cocoapods generalmente generarán configuraciones de pod como Release, esta línea de Podfile le permite decirle que son depuración.
Este error me sucedió dos veces, y en todos los casos fue un error en el parámetro URL utilizado para solicitar un servicio. En un caso, la URL tenía algo de espacio en la sección del puerto, en el otro caso, algún valor opcional no se estaba desenvolviendo.
Entonces, la solución fue asegurarse de que la URL de la solicitud esté bien formada. Más información sobre mi caso e informes similares here .
Esto puede ser una simplificación excesiva, pero ¿está compilando para Release o con optimización (que elimina los símbolos de Swift o LLVM) demasiado alta? Si es así, edite su esquema y cambie a Depurar, o edite su Configuración de compilación para la optimización rápida o LLVM a Ninguno (0).
Ha pasado mucho tiempo, pero finalmente resolví el problema.
Hay un tercer indicador de optimización
LTO
o
Link Time Optimization
y, sorprendentemente, nadie lo ha mencionado aquí y, por alguna razón, tampoco le presté atención.
Está justo encima de la configuración del
Optimization Level
, como puede ver en muchas capturas de pantalla publicadas aquí.
Entonces, para resumir, hay 3 indicadores de optimización diferentes que desea desactivar para la depuración:
-
Optimización de tiempo de enlace LLVM (
-flto
) -
Nivel de optimización de LLVM (
-O
) - Nivel de optimización del compilador rápido
Más información sobre LTO: http://llvm.org/docs/LinkTimeOptimization.html
Me encontré con el mismo problema hoy, y lo descubrí (al menos en mi caso). También estoy usando CocoaPods, y estaba teniendo este problema al ejecutar mi objetivo de prueba (Swift mezclado con ObjC).
Estoy usando Xcode 7.2, con iOS 9.2 SDK.
En la imagen a continuación, puede ver las optimizaciones para el objetivo y el proyecto antes de mi cambio:
Lo sorprendente es que, aunque la optimización resuelta es Ninguna [-O0] , solo después de cambiar la configuración del proyecto de -Os a -O0 el compilador dejó de optimizar el objetivo.
A continuación puedes ver mi configuración final:
Parece que su proyecto está en modo Release. El modo de lanzamiento compila la aplicación con muchas optimizaciones, pero los depuradores odian las optimizaciones, por lo que para depurar la aplicación de manera confiable, debe cambiarla al modo de depuración que reduce la optimización y agrega un montón de información de depuración. Para cambiarlo al modo de depuración:
- Haga clic en su esquema en la esquina superior izquierda de Xcode.
- Seleccione "Editar esquema ..."
- Haga clic en el menú desplegable "Configuración de compilación". y cámbielo al modo de depuración.
Resulta que después de importar un proyecto antiguo (Xcode 7.x +) a un nuevo Xcode 8.3 (8E162), probablemente debido a la optimización del compilador, el Compilador Swift - Nivel de optimización se configuró por defecto en Optimización rápida de un solo archivo :
Cambiándolo a ninguno, resolvió el problema:
Si su proyecto está usando Swift, hay dos configuraciones separadas de "Nivel de optimización" en la configuración del proyecto / destino.
Asegúrese de configurarlos correctamente:
- Seleccione su proyecto en el panel Navegador de proyectos
- Seleccione la configuración de su proyecto en el árbol "PROYECTO"
- Haga clic en la pestaña "Configuración de compilación"
- Busque "Nivel de optimización" y verá dos configuraciones, una para LLVM y otra para Swift.
-
Establezca la configuración adecuada (
None [-O0]
para LLVM yNone [-0none]
para Swift) para la configuración de compilación en cuestión.
Hacer esto resolvió esa advertencia para mí.
Todo lo que hice fue limpiar (
Product > Clean
) mi proyecto y ejecutarlo nuevamente