Il debugger di Xcode 11 è estremamente lento: un problema noto?


95

Da quando ho aggiornato all'ultima versione Xcode 11.0 (11A420a) il debug è estremamente lento e macchinoso.

EDIT: dopo l'aggiornamento a 11.1 GM (11A1027) il problema è sempre lo stesso.

Compilare un progetto ed eseguirlo nel simulatore o su un dispositivo non è un problema. Tuttavia, quando si raggiunge un punto di interruzione, Xcode diventa più o meno inutilizzabile:

  • L'esecuzione del programma si interrompe immediatamente quando viene raggiunto il punto di interruzione. Tuttavia Xcode richiede fino a 30 secondi per mostrare la posizione nella finestra del codice e un altro minuto circa per caricare il contenuto della vista delle variabili (che mostra i valori e gli stati delle variabili disponibili al breakpoint).
  • Se utilizzo le funzioni Step into o Step over , ci vuole fino a un minuto per eseguire il passaggio successivo e ancora un altro minuto per caricare le variabili.

Sto eseguendo Xcode su un Mac mini 2018 con un i7 da 3,2 GHz e 32 GB di ram. Ho già usato Xcode 10 sulla stessa macchina senza problemi.


La ricerca di "Xcode slow" fa apparire un sacco di discussioni e ovviamente possibili soluzioni. Dai miei anni come sviluppatore iOS so che Xcode non è mai stato il programma più veloce e stabile. Tuttavia non è mai stato così grave come adesso.

Sfortunatamente nessuno dei trucchi conosciuti (riavviare Xcode o il Mac, pulire il progetto, pulire le cartelle della libreria Xcode, ecc. Ha avuto alcun effetto,

Quindi la grande domanda è:

È un problema noto in Xcode 11? Esistono soluzioni note?


Per cominciare, l'ultima versione stabile di Xcode è 11A1027, non 11A420a. Comincerei aggiornandolo.
Rafael Francisco

2
Mmh, 11A420a è l'ultima versione disponibile nell'App Store
Andrei Herford,

2
Ora ho aggiornato a 11A420a e il problema è sempre lo stesso.
Andrei Herford,

2
Ho provato 11.1 (11A1027) - stesso
nikans

3
Una cosa che potresti fare è inviare una segnalazione di bug ad Apple. Questo è quello che faccio di solito. Alla fine rispondono. In genere chiedono informazioni di sistema e richiedono l'esecuzione di alcune diagnostiche. In generale, Xcode è lento e non sono sicuro che Apple sappia come risolverlo. Utilizzo un iMac Pro a 10 core e Xcode è ancora lento.
Mobile Ben

Risposte:


26

Beh, ho avuto lo stesso problema e di recente ho scoperto che mi ero dimenticato di disabilitare la diagnostica per il mio schema

inserisci qui la descrizione dell'immagine

Apri le configurazioni della corsa -> Gestisci schemi -> Modifica schema -> Esegui -> scheda Diagnostica


7
Grazie per la risposta. A causa dei voti positivi, presumo che questo abbia risolto il problema per alcuni utenti. Tuttavia, nel mio caso non ha fatto alcuna differenza. Quindi, anche se questo potrebbe aiutare in alcuni casi, purtroppo non è una soluzione generale
Andrei Herford il

Andrei Potresti fornire alcune metriche quantitative che cosa significa "è diventato più lento"? Sai che le build di progetti in linguaggio misto di Swift e Objective-C sono generalmente più lente?
Gennadiy Ryabkin

2
Beh, penso che sia tutto nella domanda ... Prima di tutto questo non ha nulla a che fare con il tempo di costruzione. Come scritto prima: "Compilare un progetto ed eseguirlo nel simulatore o su un dispositivo non è un problema. Tuttavia quando si raggiunge un punto di interruzione Xcode diventa più o meno inutilizzabile"
Andrei Herford

Fantastico Andrei, ma la mia risposta sul debugger. La pagina Diagnostica mostra le impostazioni del debugger. E non c'è niente nel tempo di costruzione. Nello specifico la parte sulla gestione e allocazioni della memoria. Ricontrolla semplicemente il nome del tuo schema e configurazione.
Gennadiy Ryabkin

Andrei, non credo che tu abbia installato un LLDB personalizzato sopra il tuo Xcode 11, il che implica l'ultimo OS-X. È qualcosa di specifico per il tuo ambiente. Consiglierei di ricontrollare tutte le impostazioni dello schema ancora una volta.
Gennadiy Ryabkin

1

Ho riscontrato alcuni miglioramenti delle prestazioni quando si utilizza il comportamento della compilazione intera e incrementale. Inoltre, in esecuzione su Mojave e Catalina, entrambi dovrebbero mostrare problemi di prestazioni. In particolare, poiché l'anteprima di Canvas e altre nuove funzionalità richiedono una maggiore intensità della CPU rispetto all'ultima versione di Xcode, mi aspetto che le prestazioni di Mojave siano inferiori quando si utilizza Xcode 11 (poiché non è ottimizzato per questa versione del sistema operativo). Con Catalina in beta, mi aspetto di vedere anche ulteriori problemi. Non ho preso misure specifiche oltre al test della vista. L'esecuzione iniziale su Whole Compilation è lenta ma sembra migliorare in seguito.

La guida rapida afferma:

Sommario

Questa impostazione controlla il modo in cui i file Swift in un modulo vengono ricostruiti. * Incrementale : ricostruisci solo i file sorgente di Swift nel modulo che non sono aggiornati, eseguendo più processi del compilatore secondo necessità. * Whole Module : ricostruisci sempre tutti i file sorgente Swift nel modulo, in un unico processo di compilazione. Dichiarazione

Tipo di valore SWIFT_COMPILATION_MODE

Enumerazione (stringa)


4
Il tempo di compilazione è ok, usando i punti di interruzione anche se si teletrasporta xcode da qualche parte vicino all'orizzonte degli eventi di un buco nero più vicino.
Nikans,

2
Anche se la risposta non risolve il problema descritto nella domanda, si nota che l'autore ha fatto uno sforzo. Quindi non dovrebbe essere un motivo per voti negativi massicci, vero?
Andrei Herford

Incremental è attualmente l'impostazione consigliata nelle build di debug (vedi il discorso di WWDC developer.apple.com/videos/play/wwdc2018/408 ). Forse questo dipende da un progetto all'altro, ma sulla nostra una build pulita era leggermente più lenta (5s) rispetto a un intero modulo, ma circa il 40% (30s) più veloce per le build incrementali.
Mike Bryant

@nikans il tempo di compilazione è ancora lento rispetto a qualsiasi altro IDE e altri linguaggi. Ma devo ammettere che il peggio è il debugger.
Firetrap

1

Prova a deselezionare: Parallelize Build on each target in Edit Scheme . Risparmierai tempo per costruire se il tuo progetto ha molti obiettivi.

Modifica schema:

inserisci qui la descrizione dell'immagine


0

Hai provato a eseguire Xcode in modalità provvisoria? Non è l'ideale, ma questo era l'unico modo per farlo funzionare in modo efficiente. Questo fino al recente aggiornamento di Catalina in cui il mio dispositivo non viene più rilevato in modalità provvisoria. Quindi ora sono tornato al punto di partenza.


È venuto fuori che era il mio software antivirus a rallentare le cose. Disabilitarlo ha risolto il problema.
Dino

@beefon Credo che Dino si riferisse alla modalità provvisoria di MacOs. Puoi leggere di più al riguardo qui: support.apple.com/en-us/HT201262
Bartosz Kunat,

0

Ho riscontrato gli stessi problemi in due casi diversi:

1) l'app non viene lanciata da Xcode, ovvero il flag "Attendi lancio eseguibile" è impostato all'interno del pannello Info delle impostazioni Scheme Run;

2) l'opzione "Avvia a causa di un evento di recupero in background" è selezionata nelle impostazioni dello schema (ma questa non è l'impostazione predefinita)

Posizione dell'opzione Xcode

Xcode 11.2.1 (11B500)


0

Nel mio caso (XCode 11.x, MacOS 10.15.2) ho riscontrato che l'estrema lentezza del debugger si attiva solo se eseguo un singolo passaggio mentre è in corso un'altra operazione in un unico passaggio , ovvero premo il pulsante Step troppo rapidamente. La mia soluzione attuale è evitare di farlo.

Pura speculazione ma forse è innescata da XCode / LLDB che cerca di servire più punti di interruzione contemporaneamente? Prova a rimuovere tutti i punti di interruzione tranne uno e vedi se questo aiuta le cose.

Nel caso sia rilevante: lavoro principalmente con C ++ in XCode, con un po 'di Obj-C qua e là. Al momento non uso affatto Swift.


0

Ho avuto a che fare con questo da sempre e finalmente l'ho capito. Erano queste righe nel mio file ~ / .lldbinit:

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

Ho commentato quelle righe e ora è veloce quasi come senza il debugger!


-2

Avevo 238 punti di interruzione inutilizzati impostati. Quando li ho eliminati, è di nuovo veloce (anche con la diagnostica attivata).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.