O depurador Xcode 11 é extremamente lento - um problema conhecido?

95

Desde que atualizei para a versão mais recente do Xcode 11.0 (11A420a), a depuração é extremamente lenta e complicada.

EDIT: Depois de atualizar para 11.1 GM (11A1027), o problema ainda é o mesmo.

Compilar um projeto e executá-lo no simulador ou em um dispositivo não é problema. No entanto, ao atingir um ponto de interrupção, o Xcode se torna mais ou menos inutilizável:

  • A execução do programa pára imediatamente quando o ponto de interrupção é alcançado. No entanto, o Xcode precisa de até 30 segundos para mostrar a posição na janela de código e mais um minuto ou mais para carregar o conteúdo da visualização da variável (que mostra os valores e estados das variáveis ​​disponíveis no ponto de interrupção).
  • Se eu usar os recursos Step into ou Step over , leva até um minuto para realizar a próxima etapa e novamente outro minuto para carregar as variáveis.

Estou executando o Xcode em um Mac mini 2018 com 3,2 GHz i7 e 32 GB de RAM. Eu usei o Xcode 10 na mesma máquina antes sem problemas.


Pesquisar por "Xcode lento" traz uma tonelada de threads e possíveis soluções, é claro. Dos meus anos como desenvolvedor iOS, sei que o Xcode nunca foi o programa mais rápido e estável. No entanto, nunca foi tão ruim quanto agora.

Infelizmente, nenhum dos truques conhecidos (reiniciar o Xcode ou o Mac, limpar o projeto, limpar as pastas da biblioteca do Xcode, etc. teve qualquer efeito,

Portanto, a grande questão é:

Este é um problema conhecido no Xcode 11? Existem soluções conhecidas?

Andrei Herford
fonte
Bem, para começar, a última versão estável do Xcode é 11A1027, não 11A420a. Eu começaria atualizando-o.
Rafael Francisco
2
Mmh, 11A420a é a versão mais recente disponível na App Store
Andrei Herford
2
Agora atualizei para 11A420a e o problema ainda é o mesmo.
Andrei Herford
2
Tentei 11.1 (11A1027) - o mesmo
nikans
3
Uma coisa que você pode fazer é enviar um relatório de bug à Apple. Isso é o que eu normalmente faço. Eles finalmente respondem. Normalmente, eles pedem informações do sistema e exigem que você execute alguns diagnósticos. Em geral, o Xcode é lento e não tenho certeza se a Apple sabe como consertá-lo. Estou executando um iMac Pro de 10 núcleos e o Xcode ainda está lento.
Celular Ben

Respostas:

26

Bem, eu tive o mesmo problema e recentemente descobri que simplesmente esqueci de desativar o diagnóstico do meu esquema

insira a descrição da imagem aqui

Abra suas configurações de execução -> Gerenciar esquemas -> Editar esquema -> Executar -> guia Diagnóstico

Gennadiy Ryabkin
fonte
7
Obrigado pela resposta. Devido aos votos positivos, presumo que isso resolveu o problema para alguns usuários. No entanto, no meu caso, isso não fez nenhuma diferença. Embora isso possa ajudar em alguns casos, não é uma solução geral, infelizmente
Andrei Herford
Andrei Você poderia fornecer algumas métricas quantitativas o que significa "tornou-se mais lento"? Você sabia que builds de projetos de linguagens mistas de Swift e Objective-C são geralmente mais lentos?
Gennadiy Ryabkin
2
Bem, acho que está tudo em questão ... Em primeiro lugar, isso não tem nada a ver com o tempo de construção. Conforme escrito antes: "Compilar um projeto e executá-lo no simulador ou em um dispositivo não é problema. No entanto, ao atingir um ponto de interrupção, o Xcode se torna mais ou menos inutilizável"
Andrei Herford
Legal Andrei, mas minha resposta sobre o depurador. A página de diagnóstico mostra as configurações do depurador. E não há nada sobre o tempo de construção. Especificamente, a parte sobre gerenciamento e alocações de memória. Basta verificar novamente o nome do seu esquema e configuração.
Gennadiy Ryabkin
Andrei, não acho que você instalou um LLDB personalizado em cima do seu Xcode 11, o que implica o OS-X mais recente. É algo específico para o seu ambiente. Eu recomendaria verificar novamente todas as configurações do esquema mais uma vez.
Gennadiy Ryabkin
1

Eu vi algumas melhorias de desempenho ao usar o comportamento Whole versus Incremental Compilation. Além disso, a execução em Mojave e Catalina deve apresentar problemas de desempenho. Especificamente, uma vez que a visualização do Canvas e outros novos recursos exigem mais intensidade de CPU do que a última versão do Xcode, eu esperaria que o desempenho do Mojave fosse menor ao usar o Xcode 11 (já que não é otimizado para esta versão do sistema operacional). Com Catalina estando em Beta, espero ver problemas adicionais também. Não tomei medidas específicas além do teste de visão. A execução inicial em Whole Compilation é lenta, mas parece melhorar depois disso.

Estados de ajuda rápida:

Resumo

Esta configuração controla a maneira como os arquivos Swift em um módulo são reconstruídos. * Incremental : Reconstrua apenas os arquivos de origem do Swift no módulo que estão desatualizados, executando vários processos do compilador conforme necessário. * Módulo inteiro : Sempre reconstrua todos os arquivos de origem do Swift no módulo, em um único processo de compilador. Declaração

SWIFT_COMPILATION_MODE Tipo de valor

Enumeração (string)

Tommie C.
fonte
4
O tempo de compilação está ok, usando breakpoints embora teletransporte o xcode para algum lugar próximo ao horizonte de eventos de um buraco negro mais próximo.
nikans
2
Mesmo que a resposta não resolva o problema descrito na pergunta, percebe-se que o autor fez um esforço. Então isso não deveria ser motivo para votos negativos massivos, deveria?
Andrei Herford
Incremental é atualmente a configuração recomendada em compilações de depuração (consulte WWDC talk developer.apple.com/videos/play/wwdc2018/408 ). Talvez isso dependa de um projeto para outro, mas no nosso uma compilação limpa foi ligeiramente mais lenta (5s) do que uma compilação de módulo inteiro, mas cerca de 40% (30s) mais rápida para compilações incrementais.
Mike Bryant de
@nikans o tempo de compilação ainda é lento em comparação com qualquer outro IDE e outras linguagens. Mas devo admitir que o pior é o depurador.
firetrap
1

Tente desmarcar: Paralelizar Build em cada destino em Editar Esquema . Economizará tempo de construção se o seu projeto tiver muitos destinos.

Editar esquema:

insira a descrição da imagem aqui

Thien Pham
fonte
0

Você já tentou executar o Xcode em modo de segurança? Não é o ideal, mas essa foi a única maneira de fazê-lo funcionar com eficiência. Isso até a recente atualização do Catalina, onde meu dispositivo não é mais detectado no modo de segurança. Então, estou de volta à estaca zero agora.

Dino
fonte
Acontece que era meu software antivírus retardando as coisas. Desativá-lo resolveu o problema.
Dino
@beefon Acredito que Dino estava se referindo ao modo de segurança do MacOs. Você pode ler mais sobre isso aqui: support.apple.com/en-us/HT201262
Bartosz Kunat
0

Encontrei os mesmos problemas em dois casos diferentes:

1) o aplicativo não é iniciado pelo Xcode, ou seja, o sinalizador "Aguardar que o executável seja iniciado" é definido dentro do painel Informações das configurações de Execução do esquema;

2) a opção "Iniciar devido a um evento de busca em segundo plano" é selecionada nas configurações do esquema (mas este não é o padrão)

Posição da opção Xcode

Xcode 11.2.1 (11B500)

Giorgio Daino
fonte
0

No meu caso (XCode 11.x, MacOS 10.15.2), descobri que a extrema lentidão do depurador só é acionada se eu executar uma única etapa enquanto outra operação de etapa única estiver em andamento , ou seja, pressiono o botão de etapa muito rapidamente. Minha solução alternativa atual é evitar fazer isso.

Especulação pura, mas talvez seja desencadeada por XCode / LLDB tentando atender a vários pontos de interrupção simultaneamente? Tente remover todos os pontos de interrupção, exceto um, e veja se isso ajuda nas coisas.

Caso seja relevante: Eu trabalho principalmente com C ++ em XCode, com um pouco de Obj-C aqui e ali. Não uso o Swift no momento.

Reuben Scratton
fonte
0

Tenho lidado com isso há muito tempo e finalmente descobri. Foram estas linhas no meu arquivo ~ / .lldbinit:

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

Eu comentei essas linhas e agora é quase tão rápido quanto sem o depurador!

John Scalo
fonte
-2

Eu tinha 238 pontos de interrupção não utilizados definidos. Quando eu os apaguei, ficou rápido novamente (mesmo com o diagnóstico ativado).

user2989332
fonte