Как отобразить это сообщение журнала в области отладки с помощью Xcode9?

Это выглядело многообещающим, но не похоже на дублирующий вопрос, поскольку он решает проблемы в Swift.


Я завершаю существующий проект Objective C, но NSLog исчезает, когда я обновляюсь до Xcode 9. Поэтому я ищу некоторые настройки в Xcode, которые позволяют мне продолжать использовать NSLog для точной настройки проекта.

Основная отладка с использованием ведения журналов для приложений Swift и Objective-C, по-видимому, изменилась в Xcode 9, поскольку сообщения NSLog больше не отображаются в области отладки. Окно, в котором установлено DEBUG = 1, больше не выглядит как Рисунок 2 Параметр макроса препроцессора DEBUG в проекте Xcode.

В качестве примера я хочу отобразить это строковое сообщение в области отладки с помощью Xcode9.

    NSString *outputData = @"This should show in Debug area";
    NSLog( @"text: %@", outputData );

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

Надеюсь, дополнительная информация, представленная в приведенных ниже изменениях, предложит кому-то, где мне еще предстоит посмотреть. Спасибо.


ИЗМЕНИТЬ 1

В области консоли, то есть в нижней правой части области отладки, я выбрал All Output. Поэтому я попытался использовать вывод Debugger и Output, но журнала еще не было.

Я добавил эти утверждения в файл Prefix.pch

#ifndef DEBUG
#define NSLog(...) /* suppress NSLog when in release mode 
#endif

Когда я запустил код, в Навигаторе проблем появилось следующее.

    Unused variable 'outputData'

ИЗМЕНИТЬ 2

Кажется, что в Xcode9 установить DEBUG = 1 значение DEBUG = 1.

Я вставил макрос DEBUG в файл .pch, используя примеры, предложенные в нескольких сообщениях здесь, здесь, здесь (все довольно старые) и даже здесь (обязательно измените MyLog обратно в NSLog), И в каждом случае я смог сообщить о той же проблеме в навигаторе проблем, но никогда не был в консоли Debug. Аналогичная проблема (с Xcode5) была решена здесь, скопировав файлы в новый проект, но я хочу этого избежать.

Мое приложение, которое было почти закончено, до сих пор не занималось какой-либо сложной проблемой, к которой обращается унифицированное ведение журнала. Но я смотрел 2016 видео WWDC об унифицированном ведении журнала и читал его файлы слайд-шоу, ища пример того, как использовать соответствующий API для выполнения что-то как основное - напечатайте NSLog в режиме реального времени до области консоли - так, как я делал до установки Xcode9. Это может быть неправильный подход. Но я не могу думать о том, как лучше двигаться дальше.


ИЗМЕНИТЬ 3

Стоит отметить, что когда я создал новый проект Objective C с использованием Xcode9 и выполнил указанный выше код, строковое сообщение появилось в области консоли.

Другими словами, используя Xcode9, новый API ведения журнала работает с NSLog,, но только для нового проекта, а не для одного, созданного с использованием более ранней версии Xcode.


Включить макрос препроцессора DEBUG

Настройка макроса препроцессора DEBUG в проекте Xcode.

Ответ 1

Отладочный журнал был включен в области консоли Xcode9 после замены этих определений в заголовке preCompile

    #ifndef DEBUG
    #define NSLog(...) /* suppress NSLog when in release mode */ 
    #endif

со следующим

    #ifdef __DEBUG__
    #define NSLog(...) /* suppress NSLog when in release mode */
    #endif

Переменные среды для Arguments были установлены в соответствии с ответом выше с дополнительным параметром для Options.. Кто-то, более знакомый с унифицированным API протоколирования, может объяснить конкретный варианты, но я удовлетворен. У меня есть рабочее решение.

Аргументы

введите описание изображения здесь

Опции

введите описание изображения здесь

Ответ 2

Вместо того, чтобы записывать свой отладочный оператор в код, вы можете попробовать сбросить точку останова, щелкнуть правой кнопкой мыши и выбрать "Edit Breakpoint". Вы должны увидеть это меню:

введите описание изображения здесь

Оттуда вы нажмете "Edit Breakpoint", и вам будет представлено следующее:

введите описание изображения здесь

Оттуда вы можете нажать "Действие", и вы увидите это меню:

введите описание изображения здесь

Вы можете вводить сообщения печати (например: myMethodCalled) или значения переменных (myIntValue = @[email protected]), или вы можете вводить команды отладчика для выполнения в этом месте кода (например: po dump(myArray)).

Недостатком этого подхода является то, что точки останова не всегда "липкие" по отношению к строке кода, в которую вы первоначально вложили его.

Ответ 3

Попробуйте это. Перейдите к:

Product → Scheme → Edit Scheme → Run → Аргументы → Переменные среды

в Xcode.

Добавьте OS_ACTIVITY_MODE и установите значение disable или leave it empty.

Убедитесь, что он установлен!

Надеюсь, что это поможет