Подтвердить что ты не робот

Как я могу передать стандартный ввод из файла в исполняемый файл в 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.

4b9b3361

Ответ 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) Отключите подписание кода для своей цели!

No Codesigning В противном случае вы получите сообщение об ошибке "Сообщение от отладчика: невозможно подключиться"

(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 выполнит вашу программу так, как вам бы хотелось, чтобы она выполнялась.