Как я могу передать стандартный ввод из файла в исполняемый файл в Xcode 4+? - PullRequest
21 голосов
/ 03 октября 2011

У меня есть программа MPI и мне удалось скомпилировать и связать ее через Xcode 4. Теперь я хочу отладить его с помощью Xcode 4.

Как я могу передать стандартный ввод в программу из файла?

В терминале я бы набрал

mpirun -np 2 program < input.txt

Я могу запустить программу, определяющую пользовательский исполняемый файл (mpirun) на панели «Информация» редактора схем, я также знаю, что могу передавать аргументы на панели «Аргументы». Но Xcode 4, похоже, не принимает «

В этой статье говорится, что можно использовать «

Ответы [ 3 ]

25 голосов
/ 22 октября 2012

В Xcode 4.5.1:

  1. Открыть редактор схем (меню «Продукт» -> «Редактировать схему ...»)
  2. Выберите схему запуска отладки
  3. На панели вкладок «Информация» измените значение переключателя «Запуск» с «Автоматически» на «Ожидание запуска MyApp.app»
  4. Закрыть редактор схем
  5. Нажмите кнопку «Выполнить», чтобы построить и запустить свою цель. (Окно состояния XCode на панели инструментов покажет «Ожидание запуска MyApp»)
  6. Запустите Terminal и перейдите в папку вашего встроенного приложения. (Это будет что-то вроде / Users / user / Library / Developer / Xcode / DerivedData / MyApp-dmzfrqdevydjuqbexdivolfeujsj / Build / Products / Debug /)
  7. Запустите ваше приложение, отправляя все, что вы хотите, на стандартный ввод:

    echo mydata | ./MyApp.app/Contents/MacOs/MyApp
    
  8. Переключитесь обратно на Xcode, и отладчик обнаружит запуск вашего приложения и подключится к нему.

1 голос
/ 05 апреля 2018

Не хочу пробуждать зомби, но это все еще лучший результат поиска по этому вопросу.

Мне удалось заставить это работать в XCode 9.2 - но оно должно быть обратно совместимым.Он использует подоболочку и спит в сценарии перед действием.Это приведет к передаче из файла и прикреплению к файлу, и будет поддерживать точки останова.

(1) Добавьте следующий скрипт preaction.sh в ваш проект.

#!/bin/sh
exec > ${PROJECT_DIR}/tests/result.log 2>&1
(
sleep 1
${TARGET_BUILD_DIR}/${EXECUTABLE_NAME} < ${PROJECT_DIR}/tests/file
)&

(2) Затем добавьте его в свои предварительные действия в меню «Выполнить». Pre-action setting

(3) Убедитесь, что ваш запуск ожидаетисполняемый файл для запуска. Run setting

(4) Отключите подпись кода для вашей цели!

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

(5) Установите точки останова и запустите из Xcode как обычно

Вот и все, что нужно сделать.Вся хитрость заключается в том, чтобы заставить скрипт предварительного действия порождать вложенную оболочку, которая сама задерживает процесс до запуска действия запуска.

0 голосов
/ 06 октября 2011

Попробуйте следующий сценарий запуска перед действием:

mv program program.real
echo -e '#!/bin/sh\nmpirun -np 2 program.real < input.txt' > program

Возможно, это заставит XCode выполнить вашу программу так, как вы бы хотели, чтобы она выполнялась.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...