Как я могу передать стандартный ввод из файла в исполняемый файл в Xcode 4+?
У меня есть программа mpi и удалось скомпилировать ее и связать с ней через Xcode 4.
Теперь я хочу отладить его с помощью Xcode 4.
Как я могу передать стандартный ввод в программу из файла?
В терминале я бы напечатал
mpirun -np 2 program < input.txt
Я могу запустить программу, определяющую пользовательский исполняемый файл (mpirun) на панели "Информация" редактора Scheme, я также знаю, что могу передавать аргументы в панели "Аргументы". Но Xcode 4, похоже, не принимает "< input.txt" в качестве аргумента, даже если я проверяю "Использовать настраиваемый рабочий каталог" + добавить правильный каталог ввода script на панели "Параметры".
Эта статья Говорит, что в качестве аргумента можно использовать "< input.txt", но я думаю, что это работало в Xcode 2 или Xcode 3, но он больше не работает в Xcode 4.
Ответы
Ответ 1
В Xcode 4.5.1:
- Откройте редактор схем (меню продукта → Изменить схему...)
- Выберите "Запустить схему отладки"
- На вкладке "Информация" измените выбор переключателя "Запуск" с "Автоматически" на "Подождите, пока MyApp.app запустит"
- Закройте редактор схем
- Нажмите кнопку "Выполнить", чтобы создать и запустить свою цель. (Окно состояния Xcode на панели инструментов отобразит "Ожидание запуска MyApp" )
- Запустите терминал и компакт-диск в папку вашего встроенного приложения. (Это будет что-то вроде /Users/user/Library/Developer/Xcode/DerivedData/MyApp -dmzfrqdevydjuqbexdivolfeujsj/Build/Products/Debug/)
-
Запустите приложение, используя все, что вы хотите, в стандартный ввод:
echo mydata | ./MyApp.app/Contents/MacOs/MyApp
-
Вернитесь к Xcode, и отладчик обнаружит запуск приложения и привязан к нему.
Ответ 2
Не желая пробуждать зомби, но это все еще главный результат поиска для вопроса.
Мне удалось получить эту работу в XCode 9.2, но она должна быть обратной совместимости. Он использует подоболочку и сон в сценарии предварительного действия.
Это будет работать из файла и вставить cout в файл и поддерживает точки останова.
(1) Добавьте в свой проект следующий preaction.sh script.
<Предварительно > <код > #!/Bin/ш
exec > ${PROJECT_DIR}/tests/result.log 2 & 1
(
спать 1
$ {TARGET_BUILD_DIR}/${EXECUTABLE_NAME} < ${Project_dir}/тесты/файл
) & Амп;
Код > (2) Затем добавьте его в свои предварительные действия в меню "Выполнить".
![Настройки предварительного действия]()
(3) Убедитесь, что вы запускаете запуск Ожидания для исполняемого файла.
![Запустить настройку]()
(4) Отключите подписание кода для своей цели!
В противном случае вы получите сообщение об ошибке "Сообщение от отладчика: невозможно подключиться"
(5) Установите точки останова и запустите Xcode как обычно
Вот и все. Весь трюк основывается на том, чтобы сделать предварительное действие script порождением суб-оболочки, которая сама задерживает процесс до запуска запуска.
Ответ 3
Konchog, это не работает в Xcode 10.2.1.
Ответ 4
Попробуйте выполнить следующий предварительный запуск script:
mv program program.real
echo -e '#!/bin/sh\nmpirun -np 2 program.real < input.txt' > program
Возможно, это приведет к тому, что XCode выполнит вашу программу так, как вам бы хотелось, чтобы она выполнялась.