Jak włączyć NSZombie w Xcode?

302

Mam aplikację, która ulega awarii bez śledzenia błędów. Widzę część tego, co się dzieje, jeśli debuguję, ale nie mogę ustalić, który obiekt jest „zombie”.

Czy ktoś wie, jak włączyć NSZombie w Xcode 4?

Jason
źródło

Odpowiedzi:

440

Zmienne środowiskowe są teraz częścią „schematu”.

Aby edytować schemat i włączyć zombie:

  • W menu „Produkt” wybierz „Edytuj schemat”.

  • Przejdź do etapu „Uruchom Foo.app” w lewym panelu i zakładkę „Argumenty” po prawej stronie.

  • Dodaj NSZombieEnableddo sekcji „Zmienne środowiskowe” i ustaw wartość YES, tak jak w Xcode 3.


W Xcode 4.1 i nowszych znajduje się również pole wyboru na zakładce „Diagnostyka” na etapie „Uruchom”, aby „Włącz obiekty zombie”.


Z Xcode 6.4:

Zrzut ekranu

一 二三
źródło
5
Czy nie przerywa połączenia wywołania do zwolnionego obiektu na urządzeniu, w jakikolwiek sposób, aby tak się stało?
jjxtra
95
Zmieniło się to ponownie w 4.2, patrz moja odpowiedź poniżej. Przejdź do Product-> Edit Scheme-> Diagnostics
Moshe Kravchik 16.11.11
W Xcode w menu Pomoc u góry (ostatni z prawej) wyszukaj „Edycja schematu”, za każdym razem wskaże właściwy kierunek w dowolnej wersji.
unom
Jeśli włączymy tę funkcję NSZombieEnabled w naszej aplikacji, czy powinniśmy ją wypuścić do sklepu ...? Ponieważ widziałem jeden post mówiący, że nie jest dobrą praktyką wydawanie do przechowywania, gdy włączymy tę funkcję.
SURESH SANKE
2
Dla nowicjuszy, którzy pojawią się później, w Xcode 6.1 przejdź do menu Produkt> Schemat edycji programu> karta Diagnostyka> Pole wyboru Włącz obiekty zombie
Joshua Dance
146

Napotkałem ten sam problem podczas rozwiązywania problemów z EXC_BAD_ACCESS i miałem trudności ze znalezieniem ustawienia w Xcode 4.2 (najnowszym, który jest dostarczany z iOS5 SDK). Apple ciągle się porusza, a ustawienia nie są już takie, jak kiedyś.

Na szczęście go znalazłem i działa na urządzeniu, nie tylko na Symulator. Musisz otworzyć menu Produkt w Xcode, wybrać Edytuj schemat, a następnie zakładkę Diagnostyka. Tam masz „Enable Zombie Objects”. Po wybraniu i uruchomieniu w debuggerze wskaże ci podwójnie zwolniony obiekt! Cieszyć się!

W skrócie

Product->Edit Scheme->Diagnostics-> Click Enable Zombie Objects
Mosze Krawczik
źródło
2
W Xcode w menu Pomoc u góry (ostatni z prawej) wyszukaj „Edycja schematu”, za każdym razem wskaże właściwy kierunek w dowolnej wersji.
unom
43

Produkt> Profil uruchomi Instrumenty, a następnie powinien istnieć „Szablon śledzenia” o nazwie „Zombie”. Jednak ten szablon śledzenia jest dostępny tylko wtedy, gdy bieżącym miejscem docelowym kompilacji jest symulator - nie będzie dostępny, jeśli miejsce docelowe jest ustawione na urządzenie z systemem iOS.

Należy również zauważyć, że w bibliotece instrumentów nie ma rzeczywistego instrumentu Zombie. Szablon śledzenia zombie faktycznie składa się z instrumentu Alokacje z zestawem konfiguracji uruchamiania „Włącz wykrywanie NSZombie”.

Shane Fitzgibbon
źródło
13
„Jednak ten szablon śledzenia jest dostępny tylko wtedy, gdy bieżącym miejscem docelowym kompilacji jest symulator”. Dziękuję Ci!
ajh158
Dzięki, tego właśnie szukałem!
Cliff Ribaudo
W Xcode w menu Pomoc u góry (ostatni z prawej) wyszukaj „Edycja schematu”, za każdym razem wskaże właściwy kierunek w dowolnej wersji.
unom
25

Wystarczy ustawić zmienną środowiskową w pliku wykonywalnym (NSZombieEnabled = YES), a następnie uruchomić / debugować aplikację w normalny sposób. Jeśli wysyłasz wiadomość do zombie, aplikacja ulegnie awarii / przerwie w debugowaniu i NSLogpojawi się komunikat.

Aby uzyskać więcej informacji, odwiedź stronę CocoaDev: http://www.cocoadev.com/index.pl?NSZombieEnabled

Ponadto proces ten stanie się znacznie łatwiejszy wraz z wydaniem 10.6 i następnych wersji Xcode i instrumentów. Tylko mówię'. =)

Dave DeLong
źródło
W zupełności zgadzam. Nowy instrument Zombie jest bardzo fajny.
Quinn Taylor,
22

Produkt> Profil wyskoczy Instrumenty. Wybierz zombie z panelu i zwariuj.

garażtrois
źródło
5
@jluebbert Powiedziałbym, że staram się mocniej, ponieważ na pewno to widzę, uruchamiając Xcode 4.02
garageàtrois
16

Idź do produktu - schemat - schemat edycji - argumenty - zestaw zmiennych środowiskowych NSZombieEnabled = TAK

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

PJR
źródło
12

W xcode 4.2

Idź, Produkt -> edytuj schemat -> kliknij Uruchom swoją nazwę.app.app -> Diagonostyka -> Włącz obiekt Zombie.

Dax
źródło
6

Począwszy od Xcode 3.2.5 i Snow Leopard (Mac OS X 10.6), można uruchomić swój kod za pomocą instrumentu Zombies: Run > Run with Performance Tool > Zombies. To pozwala zobaczyć poszczególne obiekty i ich zachowanie liczy się na osi czasu.

Dow
źródło
1
Widzę opcję zombie, ale jest wyszarzona. Czy wiesz, jak to jest włączone?
Rahul Vyas
@RahulVyas, nigdy wcześniej tego nie widziałem, ale czy masz włączone usuwanie śmieci? W tym kontekście widziałem, że zombie nie mają sensu
Dow
Włączyłem czyszczenie pamięci w ustawieniach, które pokazują obsługiwane [-fobjc-gc], ale nadal ta opcja jest wyłączona. W rzeczywistości tylko ostatnie 5 opcji jest włączonych w kategorii instrumentów. Jakiś inny pomysł? Czy robię coś złego?
Rahul Vyas
@RahulVyas nam, aby być bardziej przejrzyste, myślałem, obracając garbage collection off byłoby ewentualnie włączyć zombie, ponieważ nie sądzę, że to możliwe, aby mieć zombie zbierania śmieci. Jeśli to nie rozwiąże problemu, zaleciłbym przeczytanie dokumentacji instrumentów (mają dobre opisy na każdym instrumencie), a jeśli nadal nie dostałeś, zadaj pytanie tutaj, aby uzyskać szerszą uwagę (i ostatecznie odpowiedź) .
Dow
4

W Xcode 4.5.2 goto Product -> Edycja schematu -> i pod zakładką Diagnostyka zaznacz pole wyboru pomiędzy celem C i włączeniem obiektów zombie, a następnie kliknij OK

Gani414
źródło
3

Aby włączyć rejestrowanie Zombie, kliknij dwukrotnie plik wykonywalny w grupie plików wykonywalnych swojego projektu Xcode. W tym momencie kliknij kartę Argumenty iw Variables to be set in the environment:sekcji utwórz zmienną wywoływaną NSZombieEnabledi ustaw jej wartość na YES.

Sen o lustrach
źródło
3

W XCode 4.0: Aby wykryć NSZombie w instrumentach, wybierz Symulator jako cel (nie można wykryć NSZomboe na urządzeniu). Uruchom Instruments (CMD + I) i wybierz szablon śledzenia „Zombie”. Cieszyć się.

Ehud B.
źródło
2

W preferencjach pliku wykonywalnego dodaj zmienną środowiskową NSZombieEnabledi ustaw wartość na YES.


źródło
2

w ur XCODE (4.3) następnie przycisk odtwarzania :) (uruchom)

wybierz: edytuj schemat

otworzy się okno zarządzania schematem

kliknij kartę Argumenty

powinieneś zobaczyć: 1- Argumenty przekazane przy uruchomieniu 2 zmienne środowiskowe

wewnątrz (2 zmiennych środowiskowych) nazwa Nazwa: NSZombieEnabled
Wartość: TAK

I gotowe ...

Rabih harb
źródło
1

NSZombieEnabled służy do debugowania BAD_ACCESS,

włącz zmienną środowiskową NSZombiesEnabled z arkusza schematów Xcode.

Click on Product⇒Edit Scheme to open the sheet and set the Enable Zombie Objects check box

ten film pomoże ci zobaczyć, co próbuję powiedzieć.

użytkownik2554822
źródło
@kleopatra Dzięki zaktualizowałem moje odpowiedzi o odpowiednie ustawienie
user2554822