Ведение журнала точек останова NSLog против XCode и создание файлов журнала - PullRequest
2 голосов
/ 21 февраля 2012

Вы бы предпочли использовать NSLog или функцию ведения журнала, предоставляемую XCode, для точек останова для отладки?

Есть ли преимущество использования NSLog?

Для приложений, работающих на клиентских устройствах: есть ли простой способ записать NSLog или эквивалентный вывод в файл или веб-службу?

1 Ответ

4 голосов
/ 21 февраля 2012

Лично я бы рекомендовал использовать как регистрацию (через 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.Вы можете добавить аналогичную функциональность, чтобы упростить форму подробного ведения журнала для сложной части вашего приложения.Когда я отлаживаю проблемы с перетаскиванием, я часто нахожу наличие журналов, чтобы просто наблюдать за происходящим (а не перебирать все).Однако, когда я закончу разработку функции или исправлю проблему, я определенно больше не заинтересован в этих журналах, поэтому я обычно условно показываю эти журналы, чтобы, если я столкнусь с проблемой позже, я мог еще раз просмотреть журналы..

...