Лично я бы рекомендовал использовать как регистрацию (через NSLog
), так и установку точек останова.Возможно, ваш вопрос заключается в том, когда вам следует использовать одно против другого.
Преимущества отладки через точки останова / GDB
- Останавливает поток программы (используйте ведение журнала, если вы не хотите останавливатьсяпоток программы)
- Показывает все локальные переменные
- Может передавать объективные c-сообщения и делать c-вызовы.Гибкий способ оперативного ответа на ваши вопросы о текущем состоянии.
Точки останова удобны, когда вы хотите войти в код и шаг за шагом наблюдать за тем, что происходит.Некоторые преимущества для пошагового выполнения кода включают возможность исследовать любую переменную, которая вам нравится, и возможность выполнять код через gdb (см. Советы по отладке Objective-C в Xcode4? для получения дополнительной информации о советах по gdb).Точки останова также удобны, поскольку вам не нужно перекомпилировать и добавлять операторы журнала.
Также см. Как установить условную точку останова в Xcode на основе свойства строки объекта?
Преимущества ведения журнала
- Не прерывает поток программы
- Обеспечивает способ агрегирования данных отладки
- Может просматриваться на других устройствах через Организатор
- Если вы используете TestFlight с TestFlight SDK, вы можете записывать журналы в сеансах, что особенно удобно при сбое приложения.
Журналы полезны для информации, которую вы всегда хотите видеть.Например, приложение, которое загружает ресурсы, может захотеть регистрировать каждый загруженный ресурс (URL и любую другую информацию, которую вы пожелаете).Мне нравится создавать условные журналы с помощью макроса DLOG
, чтобы я мог видеть больше подробных журналов только для разработки, но вырезать их для релизных сборок.
DLog (ведение журнала только для сборок DEBUG)
#ifdef DEBUG
#define DLog(...) NSLog(__VA_ARGS__)
#else
#define DLog(...) /* */
#endif
Это будет генерировать сообщения NSLog только для сборки DEBUG
.Вы можете добавить аналогичную функциональность, чтобы упростить форму подробного ведения журнала для сложной части вашего приложения.Когда я отлаживаю проблемы с перетаскиванием, я часто нахожу наличие журналов, чтобы просто наблюдать за происходящим (а не перебирать все).Однако, когда я закончу разработку функции или исправлю проблему, я определенно больше не заинтересован в этих журналах, поэтому я обычно условно показываю эти журналы, чтобы, если я столкнусь с проблемой позже, я мог еще раз просмотреть журналы..