Wie aktiviere ich NSZombie in Xcode?

302

Ich habe eine App, die ohne Fehlerverfolgung abstürzt. Ich kann einen Teil dessen sehen, was beim Debuggen vor sich geht, kann aber nicht herausfinden, welches Objekt "Zombie-ing" ist.

Weiß jemand, wie man NSZombie in Xcode 4 aktiviert?

Jason
quelle

Antworten:

440

Umgebungsvariablen sind jetzt Teil des "Schemas".

So bearbeiten Sie das Schema und aktivieren Zombies:

  • Wählen Sie im Menü "Produkt" die Option "Schema bearbeiten".

  • Gehen Sie im linken Bereich zur Phase "Run Foo.app" und rechts zur Registerkarte "Arguments".

  • Fügen Sie NSZombieEnabledden Abschnitt "Umgebungsvariablen" hinzu und setzen Sie den Wert YESwie in Xcode 3 auf.


In Xcode 4.1 und höher gibt es auch ein Kontrollkästchen auf der Registerkarte "Diagnose" der Stufe "Ausführen", um "Zombie-Objekte aktivieren" zu aktivieren.


Mit Xcode 6.4:

Bildschirmfoto

一 二三
quelle
5
Unterbricht der Aufruf des freigegebenen Objekts auf dem Gerät nicht, wie kann dies geschehen?
jjxtra
95
Es hat sich in 4.2 erneut geändert, siehe meine Antwort unten. Gehen Sie zu Produkt-> Bearbeitungsschema-> Diagnose
Moshe Kravchik
Wenn Sie in Xcode im Hilfemenü oben (letztes rechts) nach "Schema bearbeiten" suchen, werden Sie in jeder Version jedes Mal in die richtige Richtung geleitet.
Unom
Wenn wir diese NSZombieEnabled-Funktion für unsere App aktivieren, geben wir die App zum Speichern frei. Weil ich in einem Beitrag gesehen habe, dass es nicht empfehlenswert ist, diese zum Speichern freizugeben, wenn wir diese Funktion aktivieren.
SURESH SANKE
2
Für die Rookies, die danach kommen, gehen Sie in Xcode 6.1 zum Menü Produkt> Schema-Schema bearbeiten> Registerkarte Diagnose> Kontrollkästchen Zombie-Objekte aktivieren
Joshua Dance
146

Ich habe das gleiche Problem bei der Fehlerbehebung bei EXC_BAD_ACCESS festgestellt und konnte die Einstellung mit Xcode 4.2 (der neuesten Version, die mit iOS5 SDK geliefert wird) nur schwer finden. Apple bewegt Dinge weiter und die Einstellungen sind nicht mehr dort, wo sie früher waren.

Zum Glück habe ich es gefunden und es funktioniert für das Gerät, nicht nur für Simulator. Sie müssen das Menü Produkt im Xcode öffnen, Schema bearbeiten auswählen und dann die Registerkarte Diagnose auswählen. Dort haben Sie "Zombie-Objekte aktivieren". Sobald Sie ausgewählt und im Debugger ausgeführt haben, werden Sie auf das doppelt freigegebene Objekt verweisen! Genießen!

Zusamenfassend

Product->Edit Scheme->Diagnostics-> Click Enable Zombie Objects
Moshe Kravchik
quelle
2
Wenn Sie in Xcode im Hilfemenü oben (letztes rechts) nach "Schema bearbeiten" suchen, werden Sie in jeder Version jedes Mal in die richtige Richtung geleitet.
Unom
43

Produkt> Profil startet Instrumente und dann sollte es eine "Trace-Vorlage" mit dem Namen "Zombies" geben. Diese Ablaufverfolgungsvorlage ist jedoch nur verfügbar, wenn das aktuelle Build-Ziel der Simulator ist. Sie ist nicht verfügbar, wenn Sie das Ziel auf Ihrem iOS-Gerät festgelegt haben.

Ebenfalls zu beachten ist, dass sich in der Instrumentenbibliothek kein aktuelles Zombies-Instrument befindet. Die Zombies-Trace-Vorlage besteht tatsächlich aus dem Allocations-Instrument mit dem Startkonfigurationssatz "NSZombie-Erkennung aktivieren".

Shane Fitzgibbon
quelle
13
"Diese Trace-Vorlage ist jedoch nur verfügbar, wenn das aktuelle Build-Ziel der Simulator ist." Danke dir!
Ajh158
Danke, das habe ich gesucht!
Cliff Ribaudo
Wenn Sie in Xcode im Hilfemenü oben (letztes rechts) nach "Schema bearbeiten" suchen, werden Sie in jeder Version jedes Mal in die richtige Richtung geleitet.
Unom
25

Es ist eine einfache Sache, eine Umgebungsvariable in Ihrer ausführbaren Datei (NSZombieEnabled = YES)festzulegen und dann Ihre App wie gewohnt auszuführen / zu debuggen. Wenn Sie einem Zombie eine Nachricht senden, stürzt Ihre App in Debugger und abNSLog eine Nachricht für Sie.

Weitere Informationen finden Sie auf dieser CocoaDev-Seite: http://www.cocoadev.com/index.pl?NSZombieEnabled

Außerdem wird dieser Prozess mit der Veröffentlichung von 10.6 und den nächsten Versionen von Xcode und Instruments viel einfacher. Ich sage nur '. =)

Dave DeLong
quelle
Total einverstanden. Das neue Zombies-Instrument ist sehr schön.
Quinn Taylor
22

Produkt> Profil öffnet Instrumente. Wähle Zombies aus dem Panel und werde verrückt.

Garageàtrois
quelle
5
@jluebbert Ich würde sagen, versuchen Sie es stärker, weil ich es definitiv sehe, Xcode 4.02
Garageàtrois
16

Gehen Sie zu Produkt - Schema - Bearbeitungsschema - Argumente - Umgebungsvariablen set NSZombieEnabled = YES

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

PJR
quelle
12

In xcode 4.2

Gehe zu, Produkt -> Schema bearbeiten -> Klicken Sie auf Ausführen Ihres Anwendungsnamens. App -> Diagonostik -> Zombie-Objekt aktivieren.

Dax
quelle
6

Ab Xcode 3.2.5 und Snow Leopard (Mac OS X 10.6) können Sie Ihren Code über das Zombies-Instrument ausführen : Run > Run with Performance Tool > Zombies. Auf diese Weise können Sie bestimmte Objekte und deren Aufbewahrungszahlen auf einer Zeitachse anzeigen.

Dov
quelle
1
Ich kann die Option Zombies sehen, aber sie ist ausgegraut. Wissen Sie, wie es aktiviert ist?
Rahul Vyas
@ RahulVyas, das habe ich noch nie gesehen, aber hast du die Garbage Collection aktiviert? Ich konnte sehen, dass Zombies in diesem Zusammenhang keinen Sinn machten
Dov
Ich habe die Speicherbereinigung in den angezeigten Einstellungen aktiviert [-fobjc-gc], aber diese Option ist weiterhin deaktiviert. In der Kategorie Instrumente sind nur die letzten 5 Optionen aktiviert. Irgendeine andere Idee? Oder mache ich etwas falsch?
Rahul Vyas
@RahulVyas: Sorry, seine klar, dachte ich Garbage Collection drehe off würde Zombies möglicherweise aktivieren, da ich nicht glaube , es ist möglich , einen Zombie mit Garbage Collection zu haben. Wenn sich das nicht lösen lässt, würde ich empfehlen, die Dokumentation der Instrumente zu lesen (sie haben gute Beschreibungen für jedes Instrument). Wenn Sie sie immer noch nicht erhalten haben, stellen Sie hier eine Frage, um mehr Aufmerksamkeit zu erhalten (und letztendlich eine Antwort). .
Dov
4

In Xcode 4.5.2 gehen Sie zu Produkt -> Schema bearbeiten -> und aktivieren Sie auf der Registerkarte Diagnose das Kontrollkästchen zwischen Ziel C und Zombie-Objekte aktivieren und klicken Sie auf OK

Gani414
quelle
3

Um die Zombie-Protokollierung zu aktivieren, doppelklicken Sie auf die ausführbare Datei in der Gruppe der ausführbaren Dateien Ihres Xcode-Projekts. Klicken Sie an dieser Stelle auf die Registerkarte Argumente und erstellen Sie im Variables to be set in the environment:Abschnitt eine Variable mit dem Namen NSZombieEnabledund setzen Sie ihren Wert auf YES.

Traum von Spiegeln
quelle
3

In XCode 4.0: Um NSZombie in Instrumenten zu erkennen, wählen Sie den Simulator als Ziel aus (NSZomboe kann auf dem Gerät nicht erkannt werden). Führen Sie Instruments (CMD + I) aus und wählen Sie die Trace-Vorlage "Zombies". Genießen.

Ehud B.
quelle
2

Fügen Sie in den NSZombieEnabledEinstellungen Ihrer ausführbaren Datei die Umgebungsvariable hinzu und setzen Sie den Wert auf YES.


quelle
2

in ur XCODE (4.3) neben der Wiedergabetaste :) (run)

Wählen Sie: Schema bearbeiten

Das Schemaverwaltungsfenster wird geöffnet

Klicken Sie auf die Registerkarte Argumente

Sie sollten Folgendes sehen: 1- Argumente, die beim Start übergeben wurden 2- Umgebungsvariablen

innerhalb des Ortes (2 Umgebungsvariablen) Name: NSZombieEnabled
Wert: YES

Und es ist geschafft ...

Rabih Harb
quelle
1

NSZombieEnabled wird zum Debuggen von BAD_ACCESS verwendet.

Aktivieren Sie die Umgebungsvariable NSZombiesEnabled im Xcode-Schema-Blatt.

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

Dieses Video wird Ihnen helfen zu sehen, was ich zu sagen versuche.

user2554822
quelle
@kleopatra Danke aktualisiert meine Antworten mit der entsprechenden Einstellung
user2554822