Альтернатива NSZombie
Я пытаюсь отладить сбой EXC_BAD_ACCESS с помощью NSZombie. Мое приложение создает много крупных объектов, но с включенным NSZombie они не выпускаются, что приводит к сбою приложения в считанные секунды. Это означает, что я даже не могу вызвать сбой EXC_BAD_ACCESS до сбоя приложения из-за нехватки памяти.
Есть ли альтернатива? Могу ли я включить NSZombie для конкретного файла вместо всего проекта? Как еще можно отладить этот сбой (я знаю, что он вызван UIGestureRecognizer, но я часто их использую, чтобы он не сузил проблему).
Благодарю.
Редактировать: Спасибо за совет. Я думаю, что я, возможно, решил проблему и сообщу после большего тестирования.
Редактировать 2: Решил проблему самостоятельно, но выбрал ответ, который, кажется, будет хорошим решением для любых подобных проблем в будущем.
2 ответа
Все, о чем я могу думать, это реализовать это вручную; создать прокси-контейнер, который содержит объект типа id
и назначает это как -forwardingTargetForSelector:
а также заставить его ответить на -isKindOfClass:
, так далее.
Отключите ARC для прокси и сохраните его во время init
и проверить свой retainCount
при назначении цели пересылки.
Если счетчик равен 1, тогда выдайте исключение или зарегистрируйте предупреждение или что-то еще.
Пусть подозрительные классы завернутся в себя и вернут прокси в качестве последней строки своего модуля.
Для возможных бонусных баллов, магазин [NSThread callStackSymbols]
где-то (вероятно, на диске) во время прокси-модуля, чтобы вы могли хотя бы узнать, где был создан неправильно управляемый объект.
NSZombies был / предназначен для приложений, которые используют свое собственное управление памятью. Если ваше приложение использует ARC, это не поможет.
Создать новую точку останова: все исключения
Обычно это должно показать вам, где вы вызываете плохой доступ.