El depurador de Xcode 11 es extremadamente lento: ¿un problema conocido?

95

Desde que actualicé a la última versión de Xcode 11.0 (11A420a), la depuración es extremadamente lenta y engorrosa.

EDITAR: Después de actualizar a 11.1 GM (11A1027), el problema sigue siendo el mismo.

Compilar un proyecto y ejecutarlo en un simulador o en un dispositivo no es ningún problema. Sin embargo, cuando se alcanza un punto de interrupción, Xcode se vuelve más o menos inutilizable:

  • La ejecución del programa se detiene inmediatamente cuando se alcanza el punto de interrupción. Sin embargo, Xcode necesita hasta 30 segundos para mostrar la posición en la ventana de código y otro minuto más o menos para cargar el contenido de la vista de variables (que muestra los valores y estados de las variables disponibles en el punto de interrupción).
  • Si utilizo las funciones Paso a paso o Paso a paso , se tarda hasta un minuto en realizar el siguiente paso y de nuevo otro minuto en cargar las variables.

Estoy ejecutando Xcode en una Mac mini 2018 con un i7 de 3,2 GHz y 32 GB de ram. He usado Xcode 10 en la misma máquina antes sin ningún problema.


La búsqueda de "Xcode slow" trae un montón de hilos y posibles soluciones, por supuesto. Desde mis años como desarrollador de iOS, sé que Xcode nunca fue el programa más rápido y estable. Sin embargo, nunca fue tan malo como ahora.

Desafortunadamente, ninguno de los trucos conocidos (reiniciar Xcode o Mac, limpiar el proyecto, limpiar las carpetas de la biblioteca de Xcode, etc.) tuvo ningún efecto,

Entonces la gran pregunta es:

¿Es este un problema conocido en Xcode 11? ¿Existen soluciones conocidas?

Andrei Herford
fuente
Bueno, para empezar, la última versión estable de Xcode es 11A1027, no 11A420a. Empezaría actualizándolo.
Rafael Francisco
2
Mmh, 11A420a es la última versión disponible en la App Store
Andrei Herford
2
Ahora he actualizado a 11A420a y el problema sigue siendo el mismo.
Andrei Herford
2
Probé 11.1 (11A1027) - mismo
nikans
3
Una cosa que puede hacer es presentar un informe de error a Apple. Eso es lo que hago normalmente. Eventualmente responden. Por lo general, solicitan información del sistema y requieren que ejecute algunos diagnósticos. En general, Xcode es lento y no estoy seguro de que Apple sepa cómo solucionarlo. Estoy ejecutando un iMac Pro de 10 núcleos y Xcode todavía es muy lento.
Mobile Ben

Respuestas:

26

Bueno, tuve el mismo problema y recientemente descubrí que simplemente olvidé deshabilitar los diagnósticos para mi esquema.

ingrese la descripción de la imagen aquí

Abra sus configuraciones de ejecución -> Administrar esquemas -> Editar esquema -> Ejecutar -> pestaña Diagnóstico

Gennadiy Ryabkin
fuente
7
Gracias por la respuesta. Debido a los votos positivos, asumo que esto resolvió el problema para algunos usuarios. Sin embargo, en mi caso no supuso ninguna diferencia. Entonces, aunque esto podría ayudar en algunos casos, desafortunadamente no es una solución general
Andrei Herford
Andrei ¿Podría proporcionar algunas métricas cuantitativas sobre lo que significa "se volvió más lento"? ¿Sabe que las compilaciones de proyectos de idiomas mixtos de Swift y Objective-C son generalmente más lentas?
Gennadiy Ryabkin
2
Bueno, creo que todo está en la cuestión ... En primer lugar, esto no tiene nada que ver con el tiempo de construcción. Como se escribió anteriormente: "Compilar un proyecto y ejecutarlo en un simulador o en un dispositivo no es un problema. Sin embargo, cuando se alcanza un punto de interrupción, Xcode se vuelve más o menos inutilizable"
Andrei Herford
Genial Andrei, pero mi respuesta sobre el depurador. La página de diagnóstico muestra la configuración del depurador. Y no hay nada sobre el tiempo de construcción. Específicamente la parte sobre administración de memoria y asignaciones. Simplemente vuelva a verificar el nombre de su esquema y configuración.
Gennadiy Ryabkin
Andrei, no creo que hayas instalado un LLDB personalizado encima de tu Xcode 11, lo que implica el último OS-X. Es algo específico de su entorno. Recomendaría volver a verificar todas las configuraciones del esquema una vez más.
Gennadiy Ryabkin
1

He visto algunas mejoras en el rendimiento al usar el comportamiento Compilación total versus compilación incremental. Además, la ejecución en Mojave y Catalina debería mostrar problemas de rendimiento. Específicamente, dado que la vista previa de Canvas y otras características nuevas requieren más intensidad de CPU que la última versión de Xcode, esperaría que el rendimiento de Mojave sea menor al usar Xcode 11 (ya que no está optimizado para esta versión del sistema operativo). Con Catalina en Beta, también esperaría ver problemas adicionales. No he tomado medidas específicas más que el examen de la vista. La ejecución inicial de Whole Compilation es lenta, pero parece mejorar a partir de entonces.

Estados de ayuda rápida:

Resumen

Esta configuración controla la forma en que se reconstruyen los archivos Swift en un módulo. * Incremental : solo reconstruya los archivos fuente de Swift en el módulo que estén desactualizados, ejecutando múltiples procesos de compilación según sea necesario. * Módulo completo : siempre reconstruya todos los archivos fuente de Swift en el módulo, en un solo proceso de compilación. Declaración

SWIFT_COMPILATION_MODE Tipo de valor

Enumeración (cadena)

Tommie C.
fuente
4
El tiempo de compilación está bien, usando puntos de interrupción aunque teletransporta xcode a algún lugar cercano al horizonte de eventos de un agujero negro más cercano.
nikans
2
Incluso si la respuesta no resuelve el problema descrito en la pregunta, se nota que el autor se ha esforzado. Así que esa no debería ser una razón para votaciones negativas masivas, ¿verdad?
Andrei Herford
Incremental es en realidad la configuración recomendada en las compilaciones de depuración ahora (consulte WWDC talk developer.apple.com/videos/play/wwdc2018/408 ). Tal vez esto dependa de una base de proyecto a proyecto, pero en la nuestra, una compilación limpia fue un poco más lenta (5 s) que la compilación de un módulo completo, pero aproximadamente un 40% (30 s) más rápido para las compilaciones incrementales.
Mike Bryant
@nikans, el tiempo de compilación aún es lento en comparación con cualquier otro IDE y otros lenguajes. Pero tengo que admitir que lo peor es el depurador.
trampa de fuego
1

Intente desmarcar: Paralelizar la construcción en cada objetivo en Editar esquema . Ahorrará tiempo en la construcción si su proyecto tiene muchos objetivos.

Editar esquema:

ingrese la descripción de la imagen aquí

Thien Pham
fuente
0

¿Ha intentado ejecutar Xcode en modo seguro? No es ideal, pero esta era la única forma en que podía hacer que funcionara de manera eficiente. Eso es hasta la reciente actualización de Catalina donde mi dispositivo ya no se detecta en modo seguro. Así que estoy de vuelta al punto de partida ahora.

Dinosaurio
fuente
Resulta que fue mi software antivirus lo que ralentizó las cosas. Deshabilitarlo resolvió el problema.
Dino
@beefon Creo que Dino se refería al modo seguro de MacO. Puede leer más sobre esto aquí: support.apple.com/en-us/HT201262
Bartosz Kunat
0

Encontré los mismos problemas en dos casos diferentes:

1) la aplicación no se inicia mediante Xcode, es decir, la bandera "Esperar a que se inicie el ejecutable" se establece dentro del panel de información de la configuración de Scheme Run;

2) la opción "Iniciar debido a un evento de recuperación en segundo plano" está seleccionada en la configuración del esquema (pero esta no es la predeterminada)

Posición de la opción Xcode

Xcode 11.2.1 (11B500)

Giorgio Daino
fuente
0

En mi caso (XCode 11.x, MacOS 10.15.2), descubrí que la lentitud extrema del depurador solo se activa si doy un paso mientras otra operación de un solo paso está en curso , es decir, presiono el botón de paso demasiado rápido. Mi solución actual es evitar hacer eso.

¿Pura especulación, pero tal vez sea provocada por XCode / LLDB que intenta dar servicio a múltiples puntos de interrupción al mismo tiempo? Intente eliminar todos los puntos de interrupción menos uno y vea si eso ayuda.

En caso de que sea relevante: principalmente trabajo con C ++ en XCode, con un poco de Obj-C aquí y allá. No uso Swift en absoluto en este momento.

Reuben Scratton
fuente
0

He estado lidiando con esto desde siempre y finalmente lo descubrí. Fueron estas líneas en mi archivo ~ / .lldbinit:

break set -F '-[UIView layoutIfNeeded]' -c '!(BOOL)[NSThread isMainThread]' -L objc
break set -F '-[UIView(AdditionalLayoutSupport) updateConstraintsIfNeeded]' -c '!(BOOL)[NSThread isMainThread]' -L objc

¡Comenté esas líneas y ahora es casi tan rápido como sin el depurador!

John Scalo
fuente
-2

Tenía establecidos 238 puntos de interrupción no utilizados. Cuando los borré, vuelve a ser rápido (incluso con los diagnósticos activados).

usuario2989332
fuente