Как интерпретировать некоторые сообщения об ошибках из консоли XCode? - PullRequest
0 голосов
/ 14 ноября 2009

Поскольку мои программы содержат все больше и больше кода, я начинаю немного расстраиваться из-за сообщений об ошибках, которые выдают в консоли:

2009-11-14 14: 31: 57.513 FC [915: 5b27] *** - [SearchResultParser responsedsToSelector:]: сообщение отправлено освобожденному экземпляру 0x82d28e0

Этот не самый плохой, так как он на самом деле говорит мне, что он связан с селектором и что он происходит в SearchResultParser. Но часто я просто получаю «сообщение, отправленное на освобожденный экземпляр 0x897867d6».

В других случаях это дамп стека, где он просто говорит мне, что я думаю, о выделении памяти для объектов, находящихся в данный момент в стеке.

Возможно, я избалован, но я привык получать гораздо больше информации из сообщений об ошибках, особенно из динамических языков: например, номер строки, в которой произошла ошибка, имена экземпляров рассматриваемых объектов и так далее.

Я читал об использовании Инструментов, и, конечно, есть точки останова. Он может просто чувствовать себя немного бессмысленным, вручную проходя 20+ освобождений и 300 строк кода, чтобы выяснить, что вызвало остановку, когда ответ прямо перед вами: «0x82d28e0 вызвал сбой»!

Я плохо напоминаю мне сообщения об ошибках, которые я получил от IDE моего микроконтроллера:)

Есть ли способ перейти с адреса экземпляра, например, 0x82d28e0 к имени экземпляра? Есть ли способ использовать информацию из консоли, чтобы сузить, где в коде происходит остановка? Особенно "сообщение, отправленное на освобожденный экземпляр", так как я, очевидно, немного заинтересован в управлении своей памятью:)

Надеюсь, кто-нибудь поможет мне лучше понять консоль :) Спасибо.

1 Ответ

4 голосов
/ 14 ноября 2009

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

Посмотрите на параметр NSZombieEnabled . Если вы включаете зомби, объекты преобразуются в зомби, когда ваш код хочет их освободить. Позже они могут дать вам больше информации о себе, когда ваш код попытается выпустить их еще раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...