Как включить NSZombie в Xcode?

302

У меня есть приложение, которое падает без отслеживания ошибок. Я могу видеть часть того, что происходит, если я отлаживаю, но не могу понять, какой объект "зомбируется".

Кто-нибудь знает, как включить NSZombie в Xcode 4?

Ясон
источник

Ответы:

440

Переменные среды теперь являются частью "схемы".

Чтобы отредактировать схему и включить зомби:

  • В меню «Продукт» выберите «Редактировать схему».

  • Перейдите к этапу «Запустить Foo.app» на левой панели и к вкладке «Аргументы» справа.

  • Добавьте NSZombieEnabledк разделу «Переменные среды» и установите значение YES, как вы могли бы в Xcode 3.


В Xcode 4.1 и выше , также есть флажок на вкладке «Диагностика» стадии «Выполнить», чтобы «Включить объекты зомби».


С Xcode 6.4:

Скриншот

一 二三
источник
5
Не прерывается ли вызов освобожденного объекта на устройстве, есть ли способ сделать это?
JJXTRA
95
Это изменилось снова в 4.2, см. Мой ответ ниже. Перейдите в Product-> Edit Scheme-> Diagnostics
Моше Кравчик
В XCode, в меню «Справка» вверху (последний справа), ищите «Редактировать схему», он будет указывать вам правильное направление каждый раз в любой версии.
Unom
Если мы включим эту функцию NSZombieEnabled в наше приложение, мы выпустим приложение для хранения ..? Потому что я видел один пост, в котором говорится, что не рекомендуется выпускать в хранилище, когда мы включаем эту функцию.
SURESH SANKE
2
Для новичков, следующих после, в Xcode 6.1 вы идете в меню Product> Scheme-Edit Scheme> вкладка Diagnostics> Checkbox Включить объекты зомби
Joshua Dance
146

Я столкнулся с той же проблемой, связанной с устранением неполадок EXC_BAD_ACCESS, и мне было трудно найти настройку с помощью Xcode 4.2 (последняя версия, поставляемая с iOS5 SDK). Apple продолжает двигаться, и настройки уже не там, где раньше.

К счастью, я нашел его, и он работает для устройства, а не только для симулятора. Вам нужно открыть меню «Продукт» в XCode, выбрать «Редактировать схему», а затем выбрать вкладку «Диагностика». Там у вас есть «Включить объекты зомби». После того, как выбран и запущен в отладчике, вы укажете на двойной объект! Наслаждайтесь!

Коротко

Product->Edit Scheme->Diagnostics-> Click Enable Zombie Objects
Моше Кравчик
источник
2
В XCode, в меню «Справка» вверху (последний справа), ищите «Редактировать схему», он будет указывать вам правильное направление каждый раз в любой версии.
Unom
43

Product> Profile запустит Instruments, а затем у вас должен появиться «Шаблон трассировки» с именем «Zombies». Однако этот шаблон трассировки доступен только в том случае, если текущим местом назначения сборки является симулятор - он не будет доступен, если в качестве места назначения установлено устройство iOS.

Также следует отметить, что в библиотеке инструментов нет актуального инструмента Zombies. Шаблон трассировки зомби на самом деле состоит из инструмента Распределения с набором конфигурации запуска «Включить обнаружение NSZombie».

Шейн Фитцгиббон
источник
13
Msgstr "Однако этот шаблон трассировки доступен только в том случае, если текущим местом назначения сборки является симулятор". Спасибо!
ajh158
Спасибо, это то, что я искал!
Клифф Рибаудо
В XCode, в меню «Справка» вверху (последний справа), ищите «Редактировать схему», он будет указывать вам правильное направление каждый раз в любой версии.
Unom
25

Это просто - установить переменную окружения в вашем исполняемом файле (NSZombieEnabled = YES), а затем запустить / отладить ваше приложение как обычно. Если вы отправите сообщение зомби, ваше приложение будет аварийно завершено или прекратит работу отладчика и NSLogсообщения для вас.

Для получения дополнительной информации, проверьте эту страницу CocoaDev: http://www.cocoadev.com/index.pl?NSZombieEnabled

Кроме того, этот процесс станет намного проще с выпуском 10.6 и следующими версиями Xcode и Instruments. Просто говорю'. знак равно

Дэйв Делонг
источник
Полностью согласен. Новый инструмент Zombies очень хорош.
Куинн Тейлор
22

Продукт> Профиль появится во всплывающих окнах. Выберите зомби на панели и сходите с ума.

garageàtrois
источник
5
@jluebbert Я бы сказал, что стараться изо всех сил, потому что я определенно вижу, работает Xcode 4.02
garageàtrois
16

Перейти к продукту - схема - редактировать схему - аргументы - переменные среды установлены NSZombieEnabled = YES

введите описание изображения здесь

введите описание изображения здесь

PJR
источник
12

В xcode 4.2

Перейти к, Продукт -> Редактировать схему -> нажмите Запустить yourappname.app -> Диагоности -> Включить объект Zombie.

Dax
источник
6

По состоянию на Xcode 3.2.5 и Snow Leopard (Mac OS X 10.6), вы можете запустить свой код через инструмент Zombies: Run > Run with Performance Tool > Zombies. Это позволяет вам видеть конкретные объекты и их количество на временной шкале.

Дов
источник
1
Я вижу вариант зомби, но он неактивен. Вы знаете, как это включено?
Рахул Вьяс
@RahulVyas, я никогда не видел этого раньше, но у тебя включена сборка мусора? Я мог видеть, что Зомби не имеют смысла в этом контексте
Дов
Я включил сборку мусора в настройках, которые он показывает, поддерживает [-fobjc-gc], но все же эта опция отключена. Infact только последние 5 опций включены в категории инструментов. Любая другая идея? Или я что-то не так делаю?
Рахул Вьяс
@RahulVyas: Извините, чтобы быть более ясным, я думал, что отключение сбора мусора , возможно, позволит зомби, так как я не думаю, что возможно иметь зомби со сборкой мусора. Если это не решит проблему, я бы порекомендовал прочитать документацию по инструментам (у них есть хорошая рецензия на каждый инструмент), а если вы все еще не получили ее, опубликуйте здесь вопрос, чтобы привлечь к нему больше внимания (и, в конечном итоге, ответ) ,
Дов
4

В Xcode 4.5.2 перейдите в Product -> Edit Scheme -> и на вкладке Diagnostics установите флажок между Objective C и Enable Zombie Objects и нажмите OK

Gani414
источник
3

Чтобы включить ведение журнала Zombie, дважды щелкните исполняемый файл в группе исполняемых файлов вашего проекта XCode. В этот момент перейдите на вкладку Аргументы и в Variables to be set in the environment:разделе создайте переменную с именем NSZombieEnabledи установите для нее значение YES.

DreamOfMirrors
источник
3

В XCode 4.0: для обнаружения NSZombie в инструментах выберите симулятор в качестве цели (не удается обнаружить NSZomboe на устройстве). Запустите инструменты (CMD + I) и выберите шаблон трассировки «Зомби». Наслаждаться.

Эхуд Б
источник
2

В настройках вашего исполняемого файла добавьте переменную окружения NSZombieEnabledи установите значение в YES.


источник
2

в вашем XCODE (4.3) следующая кнопка воспроизведения :) (запустить)

выберите: изменить схему

откроется окно управления схемой

нажмите на вкладку Аргументы

вы должны увидеть: 1- Аргументы переданы при запуске 2- переменные окружения

внутри (2-переменных среды) место Имя: NSZombieEnabled
Значение: ДА

И это сделано ....

Рабих Харб
источник
1

NSZombieEnabled используется для отладки BAD_ACCESS,

включите переменную окружения NSZombiesEnabled из листа схем Xcode.

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

это видео поможет вам увидеть, что я пытаюсь сказать.

user2554822
источник
@kleopatra Спасибо обновил мои ответы с соответствующей настройкой
user2554822