Я делаю презентацию об отладке в XCode и хотел бы получить больше информации об эффективном использовании NSLog.
В частности, у меня есть два вопроса:
- Есть ли способ легко NSLog имя текущего метода / номер строки?
- Есть ли способ "отключить" все NSLogs легко перед компиляцией для кода выпуска?
Ответы:
Вот несколько полезных макросов вокруг NSLog, который я часто использую:
Макрос DLog используется только для вывода, когда установлена переменная DEBUG (-DDEBUG в флагах C проектов для подтверждения отладки).
ALog всегда будет выводить текст (как обычный NSLog).
Вывод (например, ALog (@ "Hello world")) будет выглядеть так:
источник
(@"%s [Line %d] " fmt)
приводит к тому , которыйfmt
должен быть добавлен к строке управления? Я не видел этот синтаксис, кроме этого макроса отладки.Я взял
DLog
иALog
сверху, и добавил,ULog
что поднимаетUIAlertView
сообщение.Обобщить:
DLog
будет выводиться какNSLog
только тогда, когда установлена переменная DEBUGALog
всегда будет выводить какNSLog
ULog
будет отображатьсяUIAlertView
только когда установлена переменная DEBUGВот как это выглядит:
+1 Дидерик
источник
DLog
утверждения. Это полезно, потому что, если вы сделали это в сборках релиза,DLog
ничего не скомпилировано, и в вашем коде осталась бы точка с запятой. Это не ошибка, но может выдать предупреждение, в зависимости от ваших настроек, если оно следует за другой точкой с запятой.Выводит имя файла, номер строки и имя функции:
__FUNCTION__
в C ++ показывает искаженное имя,__PRETTY_FUNCTION__
показывает хорошее имя функции, в какао они выглядят одинаково.Я не уверен, что это правильный способ отключения NSLog, я сделал:
И никаких результатов регистрации не было обнаружено, однако я не знаю, имеет ли это какие-либо побочные эффекты.
источник
Вот одна большая коллекция констант отладки, которые мы используем. Наслаждаться.
источник
Есть новый трюк, на который нет ответа. Вы можете использовать
printf
вместо этогоNSLog
. Это даст вам чистый журнал:С
NSLog
вами получаются такие вещи:Но с собой
printf
вы получите только:Используйте этот код
источник
Мой ответ на этот вопрос может помочь, похоже, он похож на тот, который приготовил Дидерик. Вы также можете заменить вызов
NSLog()
статическим экземпляром собственного настраиваемого класса ведения журнала, чтобы вы могли добавить флаг приоритета для сообщений отладки / предупреждений / ошибок, отправлять сообщения в файл или базу данных, а также на консоль или почти все, что вы можете придумать.источник
%s
спецификатора формата, который Apple пытается осудить, и избежали-Wcstring-format-directive
предупреждения Clang, недавно представленного в 2015 году.Отключение всех NSLogs для людей, страдающих аллергией на MACROS, также можно скомпилировать здесь:
И используйте его почти как NSLog:
Из этого блога: https://whackylabs.com/logging/ios/2011/01/19/ios-moving-in-and-out-of-nslogs/
источник
Чтобы дополнить ответы выше, может быть весьма полезно использовать замену NSLog в определенных ситуациях, особенно при отладке. Например, избавление от всей информации о дате и имени процесса / идентификаторе в каждой строке может сделать вывод более читабельным и более быстрым для загрузки.
Следующая ссылка содержит довольно много полезных боеприпасов для упрощения ведения логов.
http://cocoaheads.byu.edu/wiki/a-different-nslog
источник
Легко изменить существующие NSLogs для отображения номера строки и класса, из которого они вызываются. Добавьте одну строку кода в файл префикса:
источник
Это просто, например
Вывод: - [AppDelegate applicationWillEnterForeground:]
источник
Основываясь на вышеупомянутых ответах, вот что я плагиат и придумал. Также добавлено ведение журнала памяти.
источник
Новое дополнение к DLog. Вместо полного удаления отладки из выпущенного приложения, только отключите его. Когда у пользователя возникают проблемы, требующие отладки, просто скажите, как включить отладку в выпущенном приложении, и запросите данные журнала по электронной почте.
Краткая версия: создайте глобальную переменную (да, ленивое и простое решение) и измените DLog следующим образом:
Более длинный ответ на Jomnius iLessons iLearned: как сделать динамическое ведение журнала отладки в выпущенном приложении
источник
В течение некоторого времени я использовал сайт макросов, взятых из нескольких выше. Мой фокус на регистрации в консоли, с упором на контролируемую и отфильтрованную детализацию ; если вы не возражаете против большого количества строк журнала, но хотите легко включать и выключать их, тогда это может оказаться полезным.
Во-первых, я необязательно заменяю NSLog на printf, как описано выше @Rodrigo
Далее я включаю или выключаю вход в систему.
В главном блоке определите различные категории, соответствующие модулям в вашем приложении. Также определите уровень регистрации, выше которого вызовы регистрации не будут вызываться. Затем определяют различные ароматы выходных данных NSLog
Таким образом, с текущими настройками для kLOGIFcategory и kLOGIFdetailLTEQ, вызов
будет печатать, но это не будет
и не будет
Если вы хотите переопределить настройки для отдельного вызова журнала, используйте отрицательный уровень:
Я считаю, что несколько дополнительных символов ввода каждой строки стоят, как я могу тогда
Я уверен, что многие найдут это немного излишним, но на всякий случай, если кто-то найдет, что это соответствует их целям ..
источник