Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

302
Views
¿Cuál es la solución para el "error: no se pudo expresar IRGen, no hay error adicional" en Xcode 10.1?

Tenemos un gran proyecto con muchas dependencias traídas a través de Carthage. Cada vez que intentamos mirar una variable en el depurador lldb ( p variablename ), nos da un error: error: Couldn't IRGen expression, no additional error

Ninguna de las soluciones es muy buena. Podemos ejecutar Carthage con --no-use-binaries para evitarlo, pero hace que las compilaciones tomen un tiempo prohibitivo. Podemos usar fr v en algunas variables, pero no en todas. La gente solucionó esto en versiones anteriores de Xcode cambiando los permisos en algunos directorios de Swift, pero no puedo encontrar los directorios correspondientes en Xcode 10.1. Y vi a alguien decir que cambiar el sistema de compilación de un lado a otro lo ayudó, pero eso no funcionó para nosotros.

Así que estoy comenzando esta búsqueda de una solución en Xcode 10.1 específicamente. ¿Alguien más ha descubierto qué está causando este error y/o una buena solución?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Alguien en mi equipo compartió una solución para esto que realmente funciona (no sé si lo descubrió o lo encontró en otro lado):

Establezca un punto de interrupción en la primera línea del método AppDelegate didFinishLaunchingWithOptions . Establezca la acción para este punto de interrupción en: po application

Ahora, cuando ejecute su aplicación, el depurador se detendrá en ese punto de interrupción y mostrará este texto en el panel del depurador lldb (con el nombre de su aplicación en lugar de Foo):

nota: las opciones del compilador Swift para Foo entran en conflicto con las opciones que se encuentran en otros módulos; Al cambiar a un nuevo evaluador de expresiones para Foo, las antiguas variables $R se pierden.

Y luego el depurador lldb funcionará correctamente, capaz de p y po variables y expresiones expr .

No sé por qué funciona, pero funciona, ¡y también de manera confiable!

over 4 years ago · Santiago Trujillo Report

0

Un colega y yo encontramos una solución:

Cree un archivo Objective-C en su proyecto Swift. Presiona sí cuando te pregunte por el encabezado de puente.

Test.h

 #import <Foundation/Foundation.h> @interface Test : NSObject - (id)init; @end

Test.m

 #include "Test.h" @implementation Test - (id)init { return self; } @end

MyProject-Bridging-Header.h

 #include "Test.h"

Y ahora: 🎉 no más error: Couldn't IRGen expression, no additional error y puede depurar nuevamente.

Así que creo que solo agregar un encabezado de puente funciona como una solución ...

Pero si eso no funciona:

Agregue un punto de interrupción en AppDelegate.swift en application: UIApplication, didFinishLaunching así y espero que esto ayude:

Punto de interrupción en Xcode

over 4 years ago · Santiago Trujillo Report

0

Actualmente existe un requisito estricto de que la versión del compilador Swift que usa para construir su código fuente y la versión de lldb que usa para depurarlo deben provenir de la misma cadena de herramientas. Actualmente, la información de depuración rápida para los tipos es solo una serialización de las estructuras de datos internas del compilador rápido. También depende de la información de la ruta local, lo que dificulta moverse.

Hay un esfuerzo a más largo plazo para cambiar ese diseño, pero por ahora tiene que reconstruir todos sus archivos binarios cada vez que actualiza sus herramientas y no puede usar archivos binarios prediseñados.

Sin embargo, estoy un poco sorprendido de que esto cause un problema diario. Esta reconstrucción completa solo debe ocurrir cuando obtiene nuevas fuentes de Carthage o actualiza sus herramientas, lo que no debería ser tan frecuente. Si está desencadenando reconstrucciones con más frecuencia que eso, tal vez las dependencias no se rastrean correctamente, por lo que se reconstruyen más archivos de los necesarios.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!