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?
Odpowiedzi:
Cóż, miałem ten sam problem i niedawno zorientowałem się, że właśnie zapomniałem wyłączyć diagnostykę swojego schematu
Otwórz konfiguracje biegu -> Zarządzaj schematami -> Edytuj schemat -> Uruchom -> karta Diagnostyka
źródło
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:
źródło
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:
źródło
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.
źródło
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)
Xcode 11.2.1 (11B500)
źródło
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.
źródło
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!
źródło
Miałem ustawione 238 nieużywanych punktów przerwania. Kiedy je usunąłem, znowu działa szybko (nawet z włączoną diagnostyką).
źródło