Debugger Xcode 11 działa bardzo wolno - znany problem?

95

Odkąd zaktualizowałem Xcode do najnowszej wersji 11.0 (11A420a), debugowanie jest bardzo powolne i uciążliwe.

EDYCJA: Po aktualizacji do wersji 11.1 GM (11A1027) problem jest nadal ten sam.

Skompilowanie projektu i uruchomienie go w symulatorze lub na urządzeniu nie stanowi problemu. Jednak po osiągnięciu punktu przerwania Xcode staje się mniej lub bardziej bezużyteczny:

  • Wykonywanie programu zatrzymuje się natychmiast po osiągnięciu punktu przerwania. Jednak Xcode potrzebuje do 30 sekund, aby pokazać pozycję w oknie kodu i kolejną minutę, aby załadować zawartość widoku zmiennej (który pokazuje wartości i stany zmiennych dostępnych w punkcie przerwania).
  • Jeśli korzystam z funkcji Step into lub Step over, wykonanie następnego kroku może zająć do minuty, a następnie kolejną minutę, aby załadować zmienne.

Używam Xcode na komputerze Mac mini 2018 z 3,2 GHz i7 i 32 GB pamięci RAM. Używałem Xcode 10 na tej samej maszynie wcześniej bez żadnych problemów.


Wyszukiwanie „Xcode wolno” powoduje wyświetlenie mnóstwa wątków i oczywiście możliwych rozwiązań. Z moich lat jako programisty iOS wiem, że Xcode nigdy nie był najszybszym i stabilnym programem. Jednak nigdy nie było tak źle jak teraz.

Niestety żadna ze znanych sztuczek (ponowne uruchomienie Xcode lub Maca, czyszczenie projektu, czyszczenie folderów biblioteki Xcode itp.) Nie przyniosła efektu,

Więc najważniejsze pytanie brzmi:

Czy to znany problem w Xcode 11? Czy są jakieś znane rozwiązania?

Andrei Herford
źródło
Na początek najnowsza stabilna wersja Xcode to 11A1027, a nie 11A420a. Zacząłbym od aktualizacji.
Rafael Francisco
2
Mmh, 11A420a to najnowsza wersja dostępna w App Store
Andrei Herford
2
Zaktualizowałem teraz do 11A420a i problem nadal jest ten sam.
Andrei Herford
2
Próbowałem 11.1 (11A1027) - to samo
nikans
3
Jedną z rzeczy, które możesz zrobić, jest zgłoszenie błędu do Apple. To jest to, co zwykle robię. W końcu odpowiadają. Zazwyczaj proszą o informacje o systemie i wymagają przeprowadzenia diagnostyki. Ogólnie Xcode jest powolny i nie jestem pewien, czy Apple wie, jak to naprawić. Używam 10-rdzeniowego komputera iMac Pro, a Xcode nadal działa wolno.
Mobile Ben

Odpowiedzi:

26

Cóż, miałem ten sam problem i niedawno zorientowałem się, że właśnie zapomniałem wyłączyć diagnostykę swojego schematu

enter image description here

Otwórz konfiguracje biegu -> Zarządzaj schematami -> Edytuj schemat -> Uruchom -> karta Diagnostyka

Gennadiy Ryabkin
źródło
7
Dziękuję za odpowiedź. W związku z pozytywnymi opiniami zakładam, że rozwiązało to problem niektórych użytkowników. Jednak w moim przypadku nie miało to żadnego znaczenia. Więc chociaż może to pomóc w niektórych przypadkach, nie jest to niestety ogólne rozwiązanie
Andrei Herford
Andrei Czy mógłbyś podać miary ilościowe, co oznacza „zwolnić”? Czy wiesz, że kompilacje projektów mieszanych języków w językach Swift i Objective-C są generalnie wolniejsze?
Gennadiy Ryabkin
2
Cóż, myślę, że chodzi o to ... Przede wszystkim nie ma to nic wspólnego z czasem budowy. Jak napisano wcześniej: „Kompilowanie projektu i uruchamianie go w symulatorze lub na urządzeniu nie stanowi problemu. Jednak po osiągnięciu punktu przerwania Xcode staje się mniej lub bardziej bezużyteczny”
Andrei Herford
Fajny Andrei, ale moja odpowiedź na temat debuggera. Strona diagnostyczna pokazuje ustawienia debugera. I nie ma nic o czasie budowy. W szczególności część dotycząca zarządzania pamięcią i alokacji. Po prostu sprawdź ponownie nazwę swojego schematu i konfiguracji.
Gennadiy Ryabkin
Andrei, nie sądzę, że zainstalowałeś niestandardowy LLDB na swoim Xcode 11, co oznacza najnowszy OS-X. Jest to coś specyficznego dla twojego środowiska. Zalecałbym ponowne sprawdzenie wszystkich ustawień schematu.
Gennadiy Ryabkin
1

Zauważyłem pewne ulepszenia wydajności podczas korzystania z zachowania kompilacji całościowej i przyrostowej. Dodatkowo działanie na Mojave i Catalina powinno wykazywać problemy z wydajnością. W szczególności, ponieważ podgląd Canvas i inne nowe funkcje wymagają większego obciążenia procesora niż ostatnia wersja Xcode, spodziewałbym się, że wydajność Mojave będzie niższa podczas korzystania z Xcode 11 (ponieważ nie jest zoptymalizowany dla tej wersji systemu operacyjnego). Ponieważ Catalina jest w fazie beta, spodziewam się również dodatkowych problemów. Nie podjąłem żadnych szczególnych środków poza badaniem wzroku. Początkowe uruchomienie całej kompilacji jest powolne, ale później wydaje się poprawiać.

Szybka pomoc stwierdza:

Podsumowanie

To ustawienie kontroluje sposób odbudowy plików Swift w module. * Przyrostowe : odbuduj tylko pliki źródłowe Swift w module, które są nieaktualne, uruchamiając w razie potrzeby wiele procesów kompilatora. * Cały moduł : Zawsze odbudowuj wszystkie pliki źródłowe Swift w module w jednym procesie kompilacji. Deklaracja

SWIFT_COMPILATION_MODE Typ wartości

Wyliczenie (ciąg)

Tommie C.
źródło
4
Czas kompilacji jest w porządku, używając punktów przerwania, ale teleportuje xcode gdzieś blisko horyzontu zdarzeń najbliższej czarnej dziury.
nikans
2
Nawet jeśli odpowiedź nie rozwiązuje problemu opisanego w pytaniu, można zauważyć, że autor podjął wysiłek. Więc to nie powinno być powodem do masowych głosów negatywnych, prawda?
Andrei Herford
Przyrostowe jest obecnie zalecanym ustawieniem w kompilacjach debugowania (patrz dyskusja na temat WWDC developer.apple.com/videos/play/wwdc2018/408 ). Może to zależy od projektu do projektu, ale u nas czysta kompilacja była nieco wolniejsza (5 s) niż cała kompilacja modułu, ale około 40% (30 s) szybciej w przypadku kompilacji przyrostowych.
Mike Bryant
@nikans czas kompilacji jest wciąż zbyt wolny w porównaniu z jakimkolwiek innym IDE i innymi językami. Ale muszę przyznać, że najgorsze jest debugger.
firetrap
1

Spróbuj odznaczyć: Parallelize Build dla każdego celu w Edit Scheme . Zaoszczędzi czas na budowanie, jeśli projekt ma wiele celów.

Edytuj schemat:

wprowadź opis obrazu tutaj

Thien Pham
źródło
0

Czy próbowałeś uruchomić Xcode w trybie awaryjnym? Nie jest idealny, ale był to jedyny sposób, w jaki mogłem go sprawnie działać. Dzieje się tak do ostatniej aktualizacji Catalina, w której moje urządzenie nie jest już wykrywane w trybie awaryjnym. Więc teraz wracam do punktu wyjścia.

Dino
źródło
Okazuje się, że to moje oprogramowanie antywirusowe spowalniało działanie. Wyłączenie go rozwiązało problem.
Dino
@beefon Uważam, że Dino odnosił się do trybu awaryjnego MacOs. Możesz przeczytać więcej na ten temat tutaj: support.apple.com/en-us/HT201262
Bartosz Kunat
0

Znalazłem te same problemy w dwóch różnych przypadkach:

1) aplikacja nie jest uruchamiana przez Xcode, tzn. Flaga „Czekaj na uruchomienie pliku wykonywalnego” jest ustawiona w panelu Informacje w ustawieniach Scheme Run;

2) w ustawieniach schematu wybrana jest opcja „Uruchom z powodu zdarzenia pobierania w tle” (ale nie jest to ustawienie domyślne)

Pozycja opcji Xcode

Xcode 11.2.1 (11B500)

Giorgio Daino
źródło
0

W moim przypadku (XCode 11.x, MacOS 10.15.2) stwierdziłem, że ekstremalne spowolnienie debuggera jest wyzwalane tylko wtedy, gdy wykonuję jednoetapowe działanie, podczas gdy inna jednoetapowa operacja jest w toku , tj. Naciskam przycisk kroku zbyt szybko. Moje obecne obejście polega na tym, aby tego uniknąć.

Czysta spekulacja, ale może jest wyzwalana przez XCode / LLDB próbującą obsługiwać wiele punktów przerwania jednocześnie? Spróbuj usunąć wszystkie punkty przerwania oprócz jednego i sprawdź, czy to pomaga.

Na wypadek, gdyby było to istotne: pracuję głównie z C ++ w XCode, z małym Obj-C tu i tam. Obecnie w ogóle nie używam Swift.

Reuben Scratton
źródło
0

Zajmuję się tym od zawsze i w końcu to rozgryzłem. To były te linie w moim pliku ~ / .lldbinit:

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

Skomentowałem te linie i teraz jest prawie tak szybki, jak bez debuggera!

John Scalo
źródło
-2

Miałem ustawione 238 nieużywanych punktów przerwania. Kiedy je usunąłem, znowu działa szybko (nawet z włączoną diagnostyką).

user2989332
źródło