Отладчик Xcode 11 работает очень медленно - известная проблема?


95

Поскольку я обновился до последней версии Xcode 11.0 (11A420a), отладка выполняется очень медленно и громоздко.

РЕДАКТИРОВАТЬ: после обновления до 11.1 GM (11A1027) проблема остается прежней.

Скомпилировать проект и запустить его в симуляторе или на устройстве не проблема. Однако при достижении точки останова Xcode становится более или менее непригодным для использования:

  • Выполнение программы немедленно останавливается при достижении точки останова. Однако Xcode требуется до 30 секунд, чтобы показать позицию в окне кода, и еще минуту или около того, чтобы загрузить содержимое представления переменных (которое показывает значения и состояния переменных, доступных в точке останова).
  • Если я использую функции Step into или Step over, выполнение следующего шага займет до минуты и еще одну минуту для загрузки переменных.

Я запускаю Xcode на Mac mini 2018 с i7 3,2 ГГц и оперативной памятью 32 ГБ. Раньше я без проблем использовал Xcode 10 на той же машине.


Конечно, поиск «Xcode slow» вызывает массу потоков и возможных решений. За годы работы в качестве разработчика iOS я знаю, что Xcode никогда не был самой быстрой и стабильной программой. Однако никогда не было так плохо, как сейчас.

К сожалению, ни один из известных приемов (перезапуск Xcode или Mac, очистка проекта, очистка папок библиотеки Xcode и т. Д. Не дал никакого эффекта,

Итак, большой вопрос:

Это известная проблема в Xcode 11? Есть какие-нибудь известные решения?


Ну, для начала, последняя стабильная версия Xcode - 11A1027, а не 11A420a. Я бы начал с обновления.
Рафаэль Франциско

2
Ммм, 11A420a - последняя версия, доступная в App Store
Андрей Херфорд

2
Я обновился до 11A420a, и проблема все та же.
Андрей Херфорд

2
Я пробовал 11.1 (11A1027) - то же самое
никанс

3
Единственное, что вы можете сделать, - это отправить отчет об ошибке в Apple. Это то, что я обычно делаю. В конце концов они отвечают. Обычно они запрашивают информацию о системе и требуют, чтобы вы выполнили некоторую диагностику. В целом Xcode работает медленно, и я не уверен, что Apple знает, как это исправить. Я использую 10-ядерный iMac Pro, а Xcode все еще работает медленно.
Mobile Ben

Ответы:


26

Ну, у меня была такая же проблема, и недавно я понял, что просто забыл отключить диагностику для своей схемы

введите описание изображения здесь

Откройте настройки запуска -> Управление схемами -> Изменить схему -> Выполнить -> вкладка Диагностика


7
Спасибо за ответ. Из-за голосов, я полагаю, что это решило проблему для некоторых пользователей. Однако в моем случае это не имело никакого значения. Так что, хотя в некоторых случаях это может помочь, к сожалению, это не общее решение
Андрей Херфорд

Андрей Не могли бы вы дать количественные показатели, что означает «стал медленнее»? Знаете ли вы, что сборки многоязычных проектов Swift и Objective-C обычно медленнее?
Геннадий Рябкин

2
Думаю, дело в этом ... Во-первых, это не имеет ничего общего со временем сборки. Как написано ранее: «Скомпилировать проект и запустить его в симуляторе или на устройстве не проблема. Однако при достижении точки останова Xcode становится более или менее непригодным для использования»
Андрей Херфорд

Круто Андрей, но мой ответ про отладчик. На странице диагностики отображаются настройки отладчика. И нет ничего о времени сборки. В частности, об управлении памятью и ее распределении. Просто перепроверьте название вашей схемы и конфигурации.
Геннадий Рябкин

Андрей, я не думаю, что вы установили собственный LLDB поверх Xcode 11, что подразумевает последнюю версию OS-X. Это что-то особенное для вашей среды. Я бы рекомендовал еще раз перепроверить все настройки схемы.
Геннадий Рябкин

1

Я видел некоторые улучшения производительности при использовании поведения полной или инкрементной компиляции. Кроме того, при работе на Mojave и Catalina должны возникать проблемы с производительностью. В частности, поскольку предварительный просмотр Canvas и другие новые функции требуют большей нагрузки на процессор, чем последняя версия Xcode, я ожидал, что производительность Mojave будет ниже при использовании Xcode 11 (поскольку он не оптимизирован для этой версии ОС). Поскольку Catalina находится в стадии бета-тестирования, я ожидаю увидеть и дополнительные проблемы. Я не принимал особых мер, кроме проверки зрения. Первоначальный запуск Whole Compilation идет медленно, но после этого, похоже, станет лучше.

Быстрая справка гласит:

Резюме

Этот параметр контролирует способ перестройки файлов Swift в модуле. * Инкрементальный : перестраивайте только те исходные файлы Swift в модуле, которые устарели, выполняя несколько процессов компилятора по мере необходимости. * Весь модуль : всегда перестраивайте все исходные файлы Swift в модуле за один процесс компиляции. Декларация

SWIFT_COMPILATION_MODE Тип значения

Перечисление (строка)


4
Время компиляции в порядке, используются точки останова, хотя xcode телепортируется где-то близко к горизонту событий ближайшей черной дыры.
nikans

2
Даже если ответ не решает проблему, описанную в вопросе, можно заметить, что автор приложил усилия. Так что это не должно быть причиной массовых голосов против, не так ли?
Андрей Херфорд

Фактически, добавочная настройка сейчас является рекомендуемой настройкой в ​​отладочных сборках (см. Обсуждение WWDC developer.apple.com/videos/play/wwdc2018/408 ). Возможно, это зависит от проекта к проекту, но в нашем случае чистая сборка была немного медленнее (5 с), чем сборка целого модуля, но примерно на 40% (30 с) быстрее для инкрементных сборок.
Майк Брайант

@nikans время компиляции все еще медленнее по сравнению с любой другой IDE и другими языками. Но я должен признать, что самое худшее - это отладчик.
firetrap

1

Пожалуйста, попробуйте снять флажок: Parallelize Build для каждой цели в Edit Scheme . Это сэкономит время на сборку, если у вашего проекта много целей.

Изменить схему:

введите описание изображения здесь


0

Вы пробовали запустить Xcode в безопасном режиме? Это не идеально, но это был единственный способ заставить его работать эффективно. Так было до недавнего обновления Catalina, когда мое устройство больше не обнаруживается в безопасном режиме. Итак, я вернулся к исходной точке.


Оказывается, это замедляла моя антивирусная программа. Отключение решило проблему.
Дино

@beefon Я считаю, что Дино имел в виду безопасный режим MacOs. Вы можете узнать больше об этом здесь: support.apple.com/en-us/HT201262
Бартош Кунат

0

Я обнаружил одни и те же проблемы в двух разных случаях:

1) приложение не запускается Xcode, т.е. в панели «Информация» в настройках «Запуск схемы» установлен флаг «Ждать запуска исполняемого файла»;

2) в настройках схемы выбрана опция «Запускать по событию фоновой выборки» (но это не по умолчанию)

Положение опции Xcode

Xcode 11.2.1 (11B500)


0

В моем случае (XCode 11.x, MacOS 10.15.2) я обнаружил, что чрезмерная медлительность отладчика срабатывает только в том случае, если я выполняю одношаговое действие, в то время как выполняется другая одношаговая операция , т.е. я нажимаю кнопку шага слишком быстро. Мой текущий обходной путь - избегать этого.

Чистая спекуляция, но, возможно, это вызвано тем, что XCode / LLDB пытается одновременно обслуживать несколько точек останова? Попробуйте удалить все точки останова, кроме одной, и посмотрите, поможет ли это.

В случае, если это актуально: я в основном работаю с C ++ в XCode, с небольшим количеством Obj-C кое-где. В настоящее время я вообще не использую Swift.


0

Я занимался этим вечно и наконец понял это. В моем файле ~ / .lldbinit были следующие строки:

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

Я закомментировал эти строки, и теперь это почти так же быстро, как без отладчика!


-2

У меня было установлено 238 неиспользуемых точек останова. Когда я их удалил, опять быстро (даже с включенной диагностикой).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.