iPhone - освобождаемый указатель отладки не выделялся ошибками

При освобождении указателя вы можете увидеть ошибку, например

"освобождаемый указатель не был выделен"

При отладке с помощью симулятора я добавляю аргумент сборки MallocStackLogging = YES - это позволяет мне использовать malloc_history в терминале, чтобы отследить, где я освободил указатель.

Если я отлаживаю устройство с этим аргументом сборки, я получаю всевозможные консольные ошибки «не удается создать файлы журнала стека» и т. Д.

Как ни странно, я получаю некоторые ошибки чрезмерного освобождения указателя, появляющиеся на устройстве, но не на симуляторе.

У кого-нибудь был опыт отслеживания их с помощью самого устройства?

Спасибо!


person adam    schedule 17.11.2008    source источник


Ответы (4)


Другой способ сделать это. Обязательно включите NSZombie, чтобы он сообщал адрес памяти объекта, который получает дополнительный выпуск. Затем запустите с помощью Performance Tool-> Object Allocations. Это вызовет инструменты. Посмотрите журнал консоли, предоставленный организатором Xcode. Как только вы получите аварийный поиск адреса памяти в инструментах. Вы увидите всю историю mallocs / frees для этого объекта, а также ссылки прямо в ваш код.

person Ish    schedule 15.12.2009
comment
Мне не удалось получить его с помощью этих точных указаний (в Xcode 4.2.1) - мне пришлось запустить Xcode, а затем прикрепить инструменты во время его работы. У меня было включено Enable Zombie Objects для моей текущей схемы, и как только я вызвал исключение, инструменты закрепились, как чемпион, и перенесли меня в историю для адреса зомби. Я просмотрел трассировку стека для начального распределения и увидел ненужную [autorelease], которая вызвала исключение. Отличный инструмент! - person Dov; 09.12.2011
comment
Полное руководство показано на видео WWDC от 2010 года под названием «Сессия 311 - Расширенный анализ памяти с помощью приборов» в 31:50. - person brainray; 01.03.2012

Я обычно использую NSZombie для таких вещей, проверьте это

person wisequark    schedule 17.11.2008

Вам необходимо установить переменные env MallocStackLogging в целевом исполняемом файле ...

Чтобы получить доступ к этим настройкам, выберите исполняемый файл на панели «Группы и файлы» в XCode, затем «Получить информацию».

Перейдите на вкладку «Аргументы» и добавьте следующие записи в поле «Переменные, устанавливаемые в среде»:

person Gabriel    schedule 11.06.2009

Пожалуйста, проверьте программу на наличие утечек памяти, также проверьте автозапуск и правильно ли вы освобождаете объекты. Также нам нужно проверить, выделена ли для выпущенного объекта память. освободить массив, строку или любой объект, который уже выпущен автоматически ... надеюсь, что это поможет и сработает!

Совет: вы можете проверить наличие утечек, проанализировав свой проект (нажмите shift + command + k)

person Eshwar Chaitanya    schedule 25.01.2012