我有一个mpi程序并设法通过Xcode 4编译和链接它。 现在我想使用Xcode 4进行调试。
如何从文件中将标准输入传输到程序?
在终端我会输入
mpirun -np 2 program < input.txt
我能够在Scheme编辑器的“Info”面板中运行定义自定义可执行文件(mpirun)的程序,我也知道我可以在“Arguments”面板中传递参数。但是Xcode 4似乎不接受“&lt; input.txt”作为参数,即使我选中“使用自定义工作目录”+在“选项”面板中添加输入脚本的正确目录。
This article说可以使用“&lt; input.txt”作为参数,但我猜这在Xcode 2或Xcode 3中有效,但它似乎不再适用于Xcode 4。 / p>
答案 0 :(得分:25)
在Xcode 4.5.1中:
将您想要的任何应用程序管道启动到标准输入中:
echo mydata | ./MyApp.app/Contents/MacOs/MyApp
切换回Xcode,调试器将检测到您的应用程序启动并附加到它。
答案 1 :(得分:1)
不想唤醒僵尸,但这仍然是问题的最佳搜索结果。
我已经设法在XCode 9.2中使用它 - 但它应该向后兼容。它使用子shell并在预操作脚本中休眠。 这将从文件和管道cout管道传输到文件,并支持断点。
(1)将以下preaction.sh脚本添加到项目中。
#!/bin/sh
exec > ${PROJECT_DIR}/tests/result.log 2>&1
(
sleep 1
${TARGET_BUILD_DIR}/${EXECUTABLE_NAME} < ${PROJECT_DIR}/tests/file
)&
(4)关闭目标代码签名!
否则您将收到错误&#34;来自调试器的消息:无法附加&#34;
(5)设置断点并正常运行Xcode
这就是它的全部内容。整个技巧依赖于使预操作脚本产生一个子shell,该子shell本身会延迟进程,直到启动运行操作。
答案 2 :(得分:0)
另一种方法:
在程序的最开始,freopen
输入文件作为标准输入。
freopen( "input.txt", "r", stdin );
条件宏可能对您有所帮助。
#ifdef DEBUG
freopen( "input.txt", "r", stdin );
freopen( "output.txt", "w", stdout );
#endif
答案 3 :(得分:-1)
尝试以下预执行运行脚本:
mv program program.real
echo -e '#!/bin/sh\nmpirun -np 2 program.real < input.txt' > program
也许这会欺骗XCode执行你想要执行的程序。