Как получить вывод приложения os x на консоли или в файл?
Я пишу приложение Cocoa с встроенным Mono. Я хочу запустить и увидеть свой вывод отладки в терминале. На стороне Cocoa я использую NSLog()
, а на стороне Mono я использую Debug.Write()
. Я могу видеть вывод отладки в консоли xcode, но не в Terminal. Это то, что я пробовал:
$: open /path/build/Debug/MyProgram.app
$: open /path/build/Debug/MyProgram.app > output
$: open /path/build/Debug/MyProgram.app 2> output
в терминале, но я не выводю его на консоль или в "выход".
Какая правильная команда?
PS. Моя конечная цель - написать плагин vim для управления, сборки, запуска, отладки проекта xcode. Вы можете избавить меня от этой проблемы, если вы можете получить этот менеджер ввода vi для работы с xcode.
Ответы
Ответ 1
Крис дал хороший обзор того, как работает Консоль, но для конкретного ответа на ваш вопрос, если вы хотите видеть результаты непосредственно в своем терминале, вам нужно запустить встроенный продукт в качестве дочернего элемента терминала, что означает использование что-то вроде
/path/debug/build/MyProgram.app/Contents/MacOS/MyProgram
чтобы запустить приложение.
Ответ 2
Терминал на Mac OS X - это еще одно приложение. Открытие окна терминала для ввода/вывода текста не является неотъемлемой функцией каждого приложения, как в Windows.
Кроме того, open /path/to/MyApp.app
не выполняет MyApp.app в качестве подпроцесса вашей оболочки, он отправляет сообщение в инфраструктуру запуска операционной системы, прося ее выполнить приложение в обычном режиме, так же, как если бы оно было двойным, щелкнули в Finder или щелкнули в Dock. Вот почему вы не можете просто перенаправить свой вывод, чтобы посмотреть, что ваше приложение отправляет на stdout
или stderr
.
Вы можете использовать Console.app для просмотра результатов приложений, запущенных обычным способом, потому что инфраструктура запуска специально отправляет туда stdout
и stderr
. Вы также можете использовать подпрограммы asl
для запроса журнала или выполнить более сложную регистрацию, если вы этого пожелаете.
Ответ 3
Откройте Console.app в/Приложения/Утилиты. Все выходные данные NSLog будут напечатаны в системном журнале.
Или, если вы запустите его из Xcode, весь вывод будет напечатан в консоли Debug.
Я сейчас не на своем Mac и не помню последовательность команд или меню, в котором находится Debug Console, возможно, меню сборки?
Ответ 4
Обзор
Идея состоит в том, чтобы просто запустить приложение из командной строки, используя ios-deploy.
Инструкции
- Установить ios-deploy
- Запустите приложение из xcode (убедитесь, что он успешно запущен)
- перейдите в меню xcode > настройки > местоположения и щелкните по стрелке в производных данных:
![enter image description here]()
- в каталоге производных данных найдите файл .app в разделе Build/intermediates/Products
- в терминале введите следующее
ios-deploy --debug --bundle
затем перетащите файл .app с шага 4 на терминал.. у вас должно быть что-то вроде этого
ios-deploy --debug --bundle path/to/your/applicationName.app
и это! Приложение должно успешно запускаться, и все журналы будут отправляться на ваш терминал.