我正在尝试使用OS X Lion上的Xcode调试C命令行应用程序。应用程序需要通过标准输入输入大量数据。在shell上我只是将一个文本文件传输到这个应用程序中。
如何使用Xcode执行此操作?
答案 0 :(得分:3)
您可以将数据传输到Xcode项目的可执行文件中以进行调试。
请参阅我对类似Stackoverflow问题here的回答。
(为方便起见而复制):
在Xcode 4.5.1中:
dmzfrqdevydjuqbexdivolfeujsj/Build/Products/Debug/
)将您想要的任何应用程序管道启动到标准输入中:
echo mydata | ./MyApp.app/Contents/MacOs/MyApp
切换回Xcode,调试器将检测到您的应用程序启动并附加到它。
答案 1 :(得分:3)
只是为了更好地澄清@ Nestor的回答......
我无法想出一种管道进入x-code的方法,所以我在我的脚本开头添加了以下代码,这些代码来自一个名为test file的测试文件。
// For debugging
if (argc == 2 && strcmp(argv[1], "debug") == 0 ) {
printf("== [RUNNING IN DEBUG MODE]==\n\n");
char test_file_path[] = "/Users/bonobos/are/amazing/test.txt";
freopen(test_file_path, "r", stdin);
}
请注意,我需要完整的文件路径,因为当xcode编译时它会转到一些奇怪的随机文件夹,所以如果你不想打扰包装文本资源,最好使用绝对路径。
freopen将文件内容发送到stdin。
也因为我有if语句我设置xcode以获得debug的参数。这样做可以用注释来做,并且在编译反复数据时忘记取消注释。
设置xcode参数,转到:
然后在运行方案中设置参数'debug':
答案 2 :(得分:1)
不幸的是,你不能。我不得不修改我的程序以从文件中读取以进行调试,如下所示:
NSFileHandle *input;
if (AmIBeingDebugged())
input = [NSFileHandle fileHandleForReadingAtPath:@"/Users/me/debug.input"];
else
input = [NSFileHandle fileHandleWithStandardInput];
AmIBeingDebugged的来源是here。