Отладчик 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.