start how debuggear debug como breakpoint debugging swift console var po

debugging - how - `po` da` error:<EXPR>: 1: 1: error: uso de identificador no resuelto`



how to debug in swift xcode (6)

Apuesto a que ese error se debe al hecho de que foo se ha optimizado durante la compilación y su símbolo ya no existe en el código compilado (incluso si no debería tener una depuración y sigue siendo un error de LLDB)

Probablemente si agrega algún uso de foo en las siguientes líneas (incluso una impresión), su símbolo se mantendrá en el IR y podrá po foo

(Estoy de acuerdo en que sigue siendo un error, pero al menos si funciona, tendrá una solución alternativa y algún sentido de explicación)

Tengo este problema con po en la consola donde tratar de generar una función funciona en sí mismo, pero la salida de una variable o constante no lo hace.

Como puede ver aquí, aunque podría pensar que var / let contiene el contenido de bar.boy() , Swift de alguna manera no puede encontrarlo ...


Configuré Swift Complier en "-O"

SWIFT_OPTIMIZATION_LEVEL = "-O";

y vuelva a configurarlo en "-Onone".

SWIFT_OPTIMIZATION_LEVEL = "-Onone";

Entonces funciona.


Encontré un problema similar pero ya tenía la configuración correcta, todas las optimizaciones establecidas en None . Sin embargo, todavía no obtuve ningún valor.

Después de investigar más, descubrí que el problema se originó porque Xcode no pudo resolver los tipos:

(lldb) frame variable self <could not resolve type>

Eso me llevó a esta pregunta: xcode 8 Debugger ''No se pudo resolver el tipo'' donde se describe el problema y el encabezado de puente parece causar problemas.

Con mi proyecto sin encabezados de puente, estudié la configuración de compilación una vez más y encontré esta configuración

Esto se estableció inicialmente en YES . Después de cambiarlo a NO símbolos vuelven a funcionar.

SWIFT_INSTALL_OBJC_HEADER = NO


Resulta que probablemente hubo un error en el pasado que cuando agregaba un archivo Swift agregaría / solicitaría un encabezado Bridging, pero no agregaría esa línea a su proyecto

SWIFT_OPTIMIZATION_LEVEL = "-Onone";

lo que significa que te quedarías en este estado

resultando en un error: <EXPR>:1:1: error: use of unresolved identifier !

Solo pude descubrir eso porque moví los archivos en mi proyecto y cuando agregué archivos ObjC al proyecto, me preguntó sobre un encabezado Bridging (¡aunque ya tenía uno!) Y afortunadamente agregó SWIFT_OPTIMIZATION_LEVEL . Uno podría considerar que es un error para considerar que el valor predeterminado es el fastest , pero de nuevo supongo que esto fue solo un error en el pasado y se solucionó ahora.

Aún así, arreglé ahora que podría ser un error al revés, si no agrega none en la versión de lanzamiento. No puedo probar esto ahora porque para probar esto solo tuve una compilación de Debug . Lo dejaré como ejercicio :) para los ingenieros de Apple.


Si su proyecto está usando Swift, hay dos configuraciones separadas de "Nivel de optimización" en la configuración del proyecto / destino. No es solo "SWIFT_OPTIMIZATION_LEVEL". Consulte este enlace: https://.com/a/32984193/2060180

Lo dejaré aquí en caso de que sea útil para alguien.


Solucionado después de la configuración:

Optimization Level = None[-Onone] en Swift Compiler - Generación de código

Tenga en cuenta que la configuración del Optimization Level en Apple LLVM 8.0 - Generación de código no tiene ningún efecto