Bagaimana cara mengaktifkan NSZombie di Xcode?

302

Saya memiliki aplikasi yang mogok tanpa penelusuran kesalahan. Saya dapat melihat bagian dari apa yang terjadi jika saya men-debug, tetapi tidak dapat menemukan objek mana yang "zombie-ing".

Adakah yang tahu cara mengaktifkan NSZombie di Xcode 4?

jason
sumber

Jawaban:

440

Variabel lingkungan sekarang menjadi bagian dari "skema".

Untuk mengedit skema dan menghidupkan zombie:

  • Di menu "Produk", pilih "Edit Skema".

  • Buka tahap "Jalankan Foo.app" di panel kiri, dan tab "Argumen" di sebelah kanan.

  • Tambahkan NSZombieEnabledke bagian "Variabel Lingkungan" dan atur nilainya menjadi YES, seperti yang Anda bisa dalam Xcode 3.


Di Xcode 4.1 dan di atasnya , ada juga kotak centang pada tab "Diagnostics" dari "Run" untuk "Enable Zombie Objects".


Dengan Xcode 6.4:

Tangkapan layar

一 二三
sumber
5
Tidak memutuskan panggilan ke objek yang tidak dapat dialokasikan pada perangkat, cara apa pun untuk mewujudkannya?
jjxtra
95
Itu berubah lagi di 4.2, lihat jawaban saya di bawah ini. Pergi ke Produk-> Edit Skema-> Diagnostik
Moshe Kravchik
Di Xcode, di menu Bantuan di bagian atas (terakhir di kanan) cari "Edit Skema" itu akan mengarahkan Anda ke arah yang benar setiap kali dalam versi apa pun.
unom
Jika kami mengaktifkan fitur NSZombieEnabled ini ke aplikasi kami, akankah kami merilis aplikasi untuk menyimpan ..? Karena saya melihat satu posting yang mengatakan bahwa itu bukan praktik yang baik untuk melepaskan untuk menyimpan ketika kita mengaktifkan fitur ini.
SURESH SANKE
2
Untuk pemula yang datang setelahnya, di Xcode 6.1 Anda pergi ke menu Produk> Skema-Edit Skema> tab Diagnostik> Kotak Centang Aktifkan Objek Zombie
Joshua Dance
146

Saya mengalami masalah yang sama dengan pemecahan masalah EXC_BAD_ACCESS dan mengalami kesulitan untuk menemukan pengaturan dengan Xcode 4.2 (yang terbaru yang datang dengan iOS5 SDK). Apple terus bergerak dan pengaturan tidak lagi seperti dulu.

Untungnya, saya sudah menemukannya dan berfungsi untuk perangkat, bukan hanya Simulator. Anda perlu membuka menu Produk di Xcode, pilih skema Edit dan kemudian pilih tab Diagnostics. Di sana Anda memiliki "Aktifkan Objek Zombie". Setelah dipilih dan dijalankan di debugger akan mengarahkan Anda ke objek yang dirilis ganda! Nikmati!

Pendeknya

Product->Edit Scheme->Diagnostics-> Click Enable Zombie Objects
Moshe Kravchik
sumber
2
Di Xcode, di menu Bantuan di bagian atas (terakhir di kanan) cari "Edit Skema" itu akan mengarahkan Anda ke arah yang benar setiap kali dalam versi apa pun.
unom
43

Produk> Profil akan meluncurkan Instrumen dan kemudian Anda akan ada "Jejak Template" bernama "Zombies". Namun templat jejak ini hanya tersedia jika tujuan pembangunan saat ini adalah simulator - itu tidak akan tersedia jika Anda menetapkan tujuan ke perangkat iOS Anda.

Juga hal lain yang perlu diperhatikan adalah bahwa tidak ada instrumen Zombies yang sebenarnya di perpustakaan instrumen. Template jejak zombie sebenarnya terdiri dari instrumen Alokasi dengan set konfigurasi peluncuran "Aktifkan NSZombie".

Shane Fitzgibbon
sumber
13
"Namun templat jejak ini hanya tersedia jika tujuan pembangunan saat ini adalah simulator". Terima kasih!
ajh158
Terima kasih, itulah yang saya cari!
Cliff Ribaudo
Di Xcode, di menu Bantuan di bagian atas (terakhir di kanan) cari "Edit Skema" itu akan mengarahkan Anda ke arah yang benar setiap kali dalam versi apa pun.
unom
25

Ini masalah sederhana mengatur variabel lingkungan pada executable Anda (NSZombieEnabled = YES), dan kemudian menjalankan / debug aplikasi Anda seperti biasa. Jika Anda mengirim pesan zombie, aplikasi Anda akan crash / break ke debugger dan NSLogpesan untuk Anda.

Untuk informasi lebih lanjut, lihat halaman CocoaDev ini: http://www.cocoadev.com/index.pl?NSZombieEnabled

Selain itu, proses ini akan menjadi jauh lebih mudah dengan rilis 10.6 dan versi Xcode dan Instrumen berikutnya. Hanya mengatakan '. =)

Dave DeLong
sumber
Sangat setuju. Instrumen Zombies baru sangat bagus.
Quinn Taylor
22

Produk> Profil akan memunculkan Instrumen. Pilih zombie dari panel dan menjadi gila.

garasiàtrois
sumber
5
@ jluebbert saya akan mengatakan berusaha lebih keras karena saya pasti melihatnya, menjalankan Xcode 4.02
garageàtrois
16

Pergi ke Produk - Skema - skema edit - Argumen - Variabel Lingkungan ditetapkan NSZombieEnabled = YA

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

PJR
sumber
12

Dalam xcode 4.2

Goto, Produk -> skema edit -> klik Jalankan yourappname.app -> Diagonostics -> Aktifkan objek Zombie.

Dax
sumber
6

Pada Xcode 3.2.5 dan Snow Leopard (Mac OS X 10.6), Anda dapat menjalankan kode Anda melalui instrumen Zombies: Run > Run with Performance Tool > Zombies. Itu memungkinkan Anda untuk melihat objek tertentu dan jumlah yang dipertahankannya pada timeline.

Dov
sumber
1
Saya bisa melihat opsi zombie tetapi berwarna abu-abu. Apakah Anda tahu cara mengaktifkannya?
Rahul Vyas
@RahulVyas, saya belum pernah melihat itu sebelumnya, tetapi apakah Anda memiliki pengumpulan sampah dihidupkan? Saya bisa melihat Zombies tidak masuk akal dalam konteks itu
Dov
Saya telah mengaktifkan pengumpulan sampah di pengaturan yang ditunjukkannya mendukung [-fobjc-gc] tapi tetap saja opsi itu dinonaktifkan. Infact hanya 5 opsi terakhir yang diaktifkan dalam kategori instrumen. Ada ide lain? Atau saya melakukan sesuatu yang salah?
Rahul Vyas
@RahulVyas: Maaf, untuk lebih jelas, saya pikir mengubah sampah koleksi off mungkin akan memungkinkan Zombies, karena saya tidak berpikir itu mungkin untuk memiliki zombie dengan pengumpulan sampah. Jika itu tidak menyelesaikannya, saya akan merekomendasikan membaca dokumentasi Instrumen (mereka memiliki artikel bagus pada setiap instrumen) dan jika Anda masih belum mendapatkannya, kirimkan pertanyaan di sini untuk mendapatkan perhatian yang lebih luas (dan akhirnya jawaban) .
Dov
4

Dalam Xcode 4.5.2 goto Product -> Edit Scheme -> dan Di bawah tab Diagnostics centang kotak centang di antara Objective C dan Enable Zombie Objects dan Klik OK

Gani414
sumber
3

Untuk mengaktifkan Zombie logging, klik dua kali yang dapat dieksekusi di grup yang dapat dieksekusi dari proyek Xcode Anda. Pada titik ini klik tab Argumen dan di Variables to be set in the environment:bagian, buat variabel dipanggil NSZombieEnableddan setel nilainya YES.

DreamOfMirrors
sumber
3

Di XCode 4.0: Untuk mendeteksi NSZombie di Instrumen, pilih Simulator sebagai target Anda (tidak dapat mendeteksi NSZomboe di perangkat). Jalankan Instrumen (CMD + I) dan pilih templat jejak "Zombies". Nikmati.

Ehud B
sumber
2

Dalam preferensi yang dapat dieksekusi Anda tambahkan variabel lingkungan NSZombieEnableddan atur nilainya YES.


sumber
2

di XCODE Anda (4.3) di sebelah tombol play :) (run)

pilih: edit skema

jendela manajemen skema akan terbuka

klik pada tab Argumen

Anda akan melihat: 1- Argumen yang diterima pada peluncuran 2- variabel lingkungan

di dalam tempat (2- variabel lingkungan) Nama: NSZombieEnabled
Nilai: YES

Dan itu selesai ....

Rabih harb
sumber
1

NSZombieEnabled digunakan untuk Debugging BAD_ACCESS,

aktifkan variabel lingkungan NSZombiesEnabled dari lembar skema Xcode.

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

video ini akan membantu Anda melihat apa yang ingin saya katakan.

pengguna2554822
sumber
@kleopatra Terima kasih telah memperbarui jawaban saya dengan pengaturan yang sesuai
user2554822