Dlaczego moje punkty przerwania nie działają?

112

Mam ustawione punkty przerwania, ale wydaje się, że Xcode je ignoruje.

AlanKley
źródło
2
ProduktCzystość mi pomogła
Alexander Bekert
Musiałem wykonać pełne ponowne uruchomienie komputera, aby ponownie działały, a teraz są bardzo wadliwe. Używam Xcode 10.2.1.
llamacorn
2
Xcode 11, uruchom ponownie i wyczyść Xcode nie działa, uruchom ponownie komputer Mac nie działa. Usuń aplikację na urządzeniu i odbuduj, rozwiązuje ten problem. Mam nadzieję, że to komuś pomoże
Randall Wang

Odpowiedzi:

148

Przede wszystkim zgadzam się w 100% z wcześniejszymi ludźmi, którzy powiedzieli, że wyłącz Load Symbols Lazily .

Mam jeszcze dwie rzeczy do dodania.

(Moja pierwsza sugestia wydaje się oczywista, ale za pierwszym razem, gdy ktoś mi ją zasugerował, moja reakcja przebiegała w ten sposób: „daj spokój, proszę, naprawdę myślisz, że nie wiedziałbym lepiej… och”)

  1. Upewnij się, że przypadkowo nie ustawiłeś „Aktywnej konfiguracji kompilacji” na „Wydanie”.

  2. W sekcji „Cele” w graficznym drzewie projektu kliknij prawym przyciskiem myszy cel i wybierz „Uzyskaj informacje”. Poszukaj właściwości o nazwie „Generuj symbole debugowania” (lub podobnej) i upewnij się, że jest zaznaczona (czyli WŁ.). Możesz także spróbować znaleźć (również w Cel >> Uzyskaj informacje) właściwość o nazwie „Format informacji debugowania” i ustawić ją na „Dwarf with dsym file”.

Istnieje wiele innych właściwości w obszarze Cel >> Uzyskaj informacje, które mogą mieć wpływ na Ciebie. Poszukaj rzeczy takich jak optymalizacja lub kompresja kodu i wyłącz to (zakładam, że pracujesz w trybie debugowania, więc nie jest to zła rada). Poszukaj też rzeczy takich jak usuwanie symboli i upewnij się, że jest to WYŁĄCZONE. Na przykład „Usuń połączony produkt” powinien być ustawiony na „Nie” dla celu debugowania.

szkodnikowy
źródło
8
Na XCode 4.5.2 miałem ten problem i okazało się, że jest to spowodowane włączoną "Optymalizacją czasu łącza", więc to kolejna rzecz do sprawdzenia
taksylian
6
Aby zmienić konfigurację kompilacji, przejdź do Product -> Scheme -> Edit Scheme, w Run - Info. U mnie zadziałało zaznaczenie opcji „Debuguj plik wykonywalny” w tym menu.
Jeffrey Sun,
2
Przejęcie górnej odpowiedzi, aby dodać, że składnia Bison wydaje się być kolejną (egzotyczną) przyczyną niedziałających punktów przerwania (zobacz moją odpowiedź poniżej). Miejmy nadzieję, że zaoszczędzi trochę czasu kolejnej osobie z tym problemem.
Dave,
2
Bardzo łatwo jest również nieumyślnie przełączyć aktywację punktu przerwania za pomocą ⌘Y. Więc uważajcie na to, dzieciaki.
dsgrnt
1
Wypróbowałem punkt numer 1 i zadziałało. Naprawdę mi pomogło. Głosowano za.
NSPratik
49

W Xcode 7 działało dla mnie:

1) Upewnij się, że cel -> schemat -> Uruchom - jest w trybie debugowania (było Release)

2) Upewnij się, że zaznaczyłeś opcję „Debuguj plik wykonywalny”, patrz poniżej:

wprowadź opis obrazu tutaj

Oded Regev
źródło
4
To jest dokładnie to, co mi się przydarzyło, pole wyboru było odznaczone
anoop4real
Dla mnie ten sam problem. Czy ta opcja nie powinna być domyślnie włączona (XCode 8.3)? Czy nie powinniśmy być wszyscy programistami, którzy i tak chcą debugować?
dgmz
Pracowałem dla mnie w Xcode 9.3, byłoby wspaniale, gdybyś podał inny obraz dla opcji 1.
Kazi Abdullah Al Mamun
24

Przejdź do preferencji debugowania Xcode. Upewnij się, że opcja „Wczytaj symbole leniwie” NIE jest zaznaczona.

AlanKley
źródło
7
Niestety w Xcode 6 nie ma preferencji „debugowania” i „leniwie” nie pojawia się w dokumentacji. Westchnienie.
Oscar
1
w porządku, teraz nie mogę znaleźć opcji „Load Symbols Lazily” w XCode 6
RNA
14

Właśnie miałem ten sam problem (ponownie). Po trzykrotnym sprawdzeniu „Wczytaj symbole leniwie” oraz usunięciu i debugowaniu flag generowania informacji, wykonałem następujące czynności:

  1. zamknij Xcode
  2. otwórz okno terminala i przejdź do katalogu projektu
  3. cd do katalogu .xcodeproj
  4. usuń wszystko oprócz pliku .pbxproj (miałem frank.mode1v3 i frank.pbxuser)

Możesz wykonać to samo zadanie w Finderze, klikając prawym przyciskiem myszy pakiet .xcodeproj i wybierając opcję „Pokaż zawartość pakietu”.

Kiedy ponownie uruchomiłem Xcode, wszystkie moje okna zostały zresetowane do domyślnych pozycji itp., Ale punkty przerwania działały!

Frank Szczerba
źródło
2
To działa, ale usuwa wszystkie twoje preferencje ... Należy to zrobić, gdy nic innego nie działało.
Rémi Doolaeghe
pracował dla mnie, dzięki. Zastanawiam się, dlaczego Xcode tak bardzo jest do bani. Xcode to najgorsze oprogramowanie, jakie kiedykolwiek napisało Apple.
Duck
Wow, to ma 5 lat. Trudno uwierzyć, że nadal działa i nadal stanowi problem!
Frank Szczerba
Nie działa dla mnie. Używam Xcode 6.01. Teraz, kiedy buduję, otrzymuję wiele błędów związanych z brakującymi plikami. Przywracam kod, aby rozwiązać problem.
Native_Mobile_Arch_Dev
Musiałem tylko ponownie uruchomić Xcode, mój przypadek był spowodowany wersjonowaniem git podczas zatwierdzania danych stanu interfejsu użytkownika xcode.
Juan Boero,
13

W przypadku Xcode 4.x: Idź do produktu> Przepływ pracy debugowania i odznacz „Pokaż dezasemblację podczas debugowania”.

W przypadku Xcode 5.x Idź do Debuguj> Przepływ pracy debugowania i odznacz „Pokaż dezasemblację podczas debugowania”.

bneupaane
źródło
11

Inny powód

Ustaw DeploymentPostprocessingna NIE w BuildSettings - szczegóły tutaj

W skrócie -

Aktywacja tego ustawienia wskazuje, że pliki binarne powinny zostać usunięte, a informacje o trybie pliku, właścicielu i grupie powinny mieć ustawione wartości standardowe. [DEPLOYMENT_POSTPROCESSING]

wprowadź opis obrazu tutaj

gbk
źródło
Po aktualizacji do XCode 7, to ustawienie było w jakiś sposób YEStylko w moich, subprojecta następnie punkty przerwania nie działały subprojects. A po ustawieniu NObyło idealnie!
Maheswaran Ravisankar
Udało mi się to dopiero po wyczyszczeniu projektu, więc nastąpi pełna przebudowa.
Biegał
8

Zobacz ten post: Punkty przerwania nie działają w Xcode? . Możesz naciskać "Uruchom" zamiast "Debuguj". W takim przypadku twój program nie działa z pomocą gdb, w którym to przypadku nie możesz oczekiwać, że punkty przerwania będą działać!

Soong
źródło
W Xcode 6.4 jest teraz tylko przycisk Uruchom i to, czy uruchamia konfigurację debugowania, czy nie, zależy od aktualnie wybranych ustawień schematu.
user2067021
6

Jednym z możliwych rozwiązań może być… przejdź do opcji Produkt> Schemat> Edytuj schemat> .. W obszarze Uruchom> informacje> Sprawdź plik wykonywalny „Debuguj plik wykonywalny”.

Soropromo
źródło
Ten działał dla mnie po uderzeniu głową przez 2 dni.
Dileep Perla
cieszę się, że pomogło.
Soropromo
5

Dzięki temu byłem w Xcode 9 przez pół frustrującego dnia. Skończyło się na prostym ustawieniu debugowania.

Przejdź do Debuguj> Debuguj przepływ pracy i upewnij się, że opcja „Zawsze pokazuj dezasemblację” jest wyłączona. Proste. :(

Gaz Long
źródło
To działa dla mnie, dzięki
dr Harish-Uz-Jaman Mridha Raju
5

Rozwiązanie dla mnie z XCode 9.4.1 (nie zatrzymało się na żadnym punkcie przerwania):

W ramach celu kompilacji -> Ustawienia kompilacji -> Poziom optymalizacji: zmieniono z „Optymalizuj pod kątem szybkości” -> „Bez optymalizacji” (teraz jest wolniejsze, ale działa)

Strinder
źródło
5

Rozwiązanie tego problemu w moim przypadku było dość proste, w Xcode - Product - Clean Build Folder, a następnie Product - Run (nie w przycisku Play Xcode).

(Wystąpił problem z Xcode 11 -beta 4 po przełączeniu na testy jednostkowe z długim naciśnięciem przycisku odtwarzania Xcode)

Lukas
źródło
4

Przeszedłem na tę stronę z tym samym problemem (kod C w Xcode 6 nie zatrzymuje się w punktach przerwania) i żadne z powyższych rozwiązań nie zadziałało (projekt był praktycznie po wyjęciu z pudełka, pod względem ustawień, tak mała szansa na jakiekolwiek ustawienie debugera być ustawiona na niewłaściwą wartość) ...

Po zmarnowaniu czasu na redukcję problemu, w końcu odkryłem winowajcę (dla mojego kodu):

Xcode (/ LLVM) nie lubi #linepoleceń preprocesora w stylu Bizona .

Usunięcie ich rozwiązało problem (debugger zatrzymał się na moich punktach przerwania).

Dave
źródło
4

Dla Xcode 4:

go Product -> Debug ->  Activate Breakpoints
evya
źródło
Dzięki! to pomogło. Zamierzałem to opublikować samodzielnie, najwyraźniej przez pomyłkę wcisnąłem ⌘Y.
Ovi
2

Mam dużo problemów z punktami przerwania w Xcode (2.4.1). Używam projektu, który zawiera tylko inne projekty (jak rozwiązanie w programie Visual Studio). Czasami stwierdzam, że punkty przerwania w ogóle nie działają, chyba że w projekcie początkowym jest ustawiony co najmniej jeden punkt przerwania (tj. Ten zawierający punkt wejścia dla mojego kodu). Jeśli jedyne punkty przerwania znajdują się w projektach „niższego poziomu”, są po prostu ignorowane.

Wydaje się również, że Xcode obsługuje poprawnie tylko operacje na punktach przerwania, jeśli działasz na punkcie przerwania, gdy jesteś w projekcie zawierającym wiersz źródłowy, w którym znajduje się punkt przerwania.

Jeśli spróbuję usunąć lub wyłączyć punkty przerwania za pośrednictwem innego projektu, akcja czasami nie działa, mimo że debugger wskazuje, że tak. Więc stwierdzę, że psuję się na wyłączonych punktach przerwania lub na (teraz niewidocznym) punkcie przerwania, który usunąłem wcześniej.

Charles Anderson
źródło
2

Moje punkty przerwania nie działają, a następnie zrobiłem kompilację / czyszczenie wszystkich celów, aby ponownie działały.


źródło
2

Myślę, że problemem może być niekompatybilność między wersjami urządzenia i Xcode. Mam ten problem podczas próby debugowania na moim iPhonie 4S z systemem iOS 5.0.1. Nadal używam Xcode 3.2.5. Symbole pobrałem ze słuchawki, wybierając opcję „użyj tego urządzenia do programowania” w oknie Organizatora. Ten telefon odmawia jednak punktu przerwania. Mój stary 3GS będzie punkt przerwania, ten sam projekt Xcode, te same ustawienia ... tylko inne urządzenie i będzie miał iOS 4.0. Myślę, że to błąd Xcode w 3.2.5, ponieważ mam symbole. Po wypróbowaniu wszystkich dotychczas zamieszczonych tutaj rozwiązań zdecydowałem, że rozwiązaniem mojego problemu jest przejście dalej i uaktualnienie do XCode 4. Być może nie możesz efektywnie debugować, chyba że twój podstawowy SDK jest co najmniej tak wysoki, jak system, na którym chcesz debugować. Może to oczywiste - czy ktoś może potwierdzić?

Edycja: zaktualizuję, gdy będę mógł potwierdzić, że to prawda.

Gavin
źródło
2

Usunięcie folderu Build rozwiązało problem za mnie.

Jack Bellis
źródło
2

Przydarzyło mi się to samo w XCode 6.3.1. Udało mi się to naprawić poprzez:

  • Zamierzam View-> Navigators-> Show Debug Navigators
  • Kliknij prawym przyciskiem myszy w katalogu głównym projektu -> Przenieś punkty przerwania (jeśli wybrano opcję Użytkownik)
  • (Wybrałem również punkty przerwania udziału opcji , chociaż nie jestem pewien, czy to konieczne).

Po wykonaniu tej zmiany ustawiam opcje Przenieś punkty przerwania z powrotem na projekt i odznaczam opcję Udostępnij punkty przerwania opcję i nadal działa.

Nie wiem dokładnie dlaczego, ale to odzyska moje punkty przerwania.

Osk
źródło
Dziękuję Ci! Naprawiono również powolną reakcję dzienników debugowania
Jim75
2

W tym celu, a także w przypadku Xcode 6 i nowszych upewnij się, że przycisk stanu punktu przerwania jest aktywny (przycisk przypominający niebieską strzałkę):

wprowadź opis obrazu tutaj

df611
źródło
1

W Xcode 4

- Product menu > Manage Schemes
- Select the scheme thats having debugging problems (if only one choose that)
- Click Edit button at bottom
- Edit Scheme dialog appears
- in left panel click on Run APPNAME.app
- on Right hand panel make sure youre on INFO tab
- look for drop down DEBUGGER:
- someone had set this to None
- set to LLDB if this is your preferred debugger
- can also change BUILD CONFIGURATION drop down to Debug 
-      but I have other targets set to AdHoc which debug fine once Debugger is set
brian.clear
źródło
1

Znalazłem problem. W jakiś sposób opcja „ Pokaż demontaż podczas debugowania ” została włączona w moim XCode, co powoduje ten problem. Kiedy go wyłączyłem, cały mój debugger zatrzymał się w kodzie źródłowym.

Możesz go znaleźć pod: Product->Debug Workflow->Show Disassemblypodczas debugowania.

Perumal
źródło
1

Możesz aktywować / dezaktywować punkty przerwania w menu rozwijanym wprowadź opis obrazu tutaj

Stan
źródło
1

Jeśli wszystko inne zawiedzie, zamiast punktu przerwania, możesz wywołać następującą funkcję:

void BreakPoint(void) {
    int i=1;
    #if !__OPTIMIZE__
    printf("Code is waiting; hit pause to see.\n");
    while(i);
    #endif
}

Aby wznowić, ręcznie ustaw i na zero, a następnie naciśnij przycisk wznowienia.

William Jockusch
źródło
1

Wypróbowałem wszystkie powyższe rzeczy, ale dla mnie dezaktywacja punktów przerwania debugowania tylko raz, a następnie ich aktywacja działała.

user8032120
źródło
@IshantMrinal Dlaczego to nie ma znaczenia? Użytkownik podał odpowiedź, która działała w jego scenariuszu.
Noel Widmer
0

Podczas ustawiania punktu przerwania kliknij prawym przyciskiem myszy i powinieneś uzyskać kilka opcji dotyczących obsługi punktu przerwania (loguj zmienne i kontynuuj, wstrzymaj wykonywanie itp.)

Upewnij się również, że w preferencjach debugowania nie jest zaznaczona opcja „Wczytaj symbole leniwie”.

(Dotyczy Xcode 3.1, brak pewności co do poprzednich / przyszłych wersji)

Scott Swezey
źródło
0

Upewnij się również, że dystrybucja aplikacji AppStore nie jest również zainstalowana na urządzeniu.


źródło
0

Inną rzeczą do sprawdzenia jest to, że jeśli masz plik plist "Uprawnienia" dla trybu debugowania (prawdopodobnie dlatego, że robisz coś z pękiem kluczy), upewnij się, że plik plist ma wiersz "get-task-allow" = YES. Bez tego debugowanie i logowanie zostaną przerwane.

davidcann
źródło
0

Wygląda na to, że istnieją 3 stany dla punktów przerwania w Xcode. Jeśli je klikniesz, przejdą przez różne ustawienia. Ciemnoniebieski jest włączony, wyszarzony jest wyłączony i czasami widziałem blady niebieski, który wymagał ponownego kliknięcia punktu przerwania, aby przejść do ciemnoniebieskiego koloru.

Poza tym upewnij się, że uruchamiasz go za pomocą polecenia debug, a nie polecenia run. Możesz to zrobić, naciskając Option + command + return lub opcję Go (debug) z menu Run.

crackity_jones
źródło
0

Mam Xcode 3.2.3 SDK 4.1 Punkty przerwania będą losowo kończyć się niepowodzeniem. Odkryłem, że jeśli wyczyścisz kompilację i użyjesz polecenia dotykowego w kompilacji, będą działać ponownie.

Damon McGIll
źródło
0

Oto niejasny problem, na który się natknąłem: jeśli pracujesz nad udostępnianą biblioteką (lub wtyczką), twoje punkty przerwania staną się żółte podczas uruchamiania, co może spowodować frustrację wbijania klawiatury i kończenie procesu debugowania. Cóż, nie rób tego! Symbole nie zostaną załadowane, dopóki aplikacja nie załaduje biblioteki, w którym to momencie punkty przerwania staną się prawidłowe. Napotkałem ten problem z wtyczką do przeglądarki ... BP były wyłączone, dopóki nie przeszedłem na stronę, na której została uruchomiona moja wtyczka.

Tim Keating
źródło