我正在尝试在 OS X Lion 上使用 Xcode 调试 C 命令行应用程序。应用程序需要通过标准输入进行大量输入数据。在 shell 上,我只是将一个文本文件通过管道传输到这个应用程序中。
我怎样才能用 Xcode 做到这一点?
我正在尝试在 OS X Lion 上使用 Xcode 调试 C 命令行应用程序。应用程序需要通过标准输入进行大量输入数据。在 shell 上,我只是将一个文本文件通过管道传输到这个应用程序中。
我怎样才能用 Xcode 做到这一点?
您可以将数据通过管道传输到 Xcode 项目的可执行文件中以进行调试。
在此处查看我对类似 Stackoverflow 问题的回答。
(为方便起见复制):
在 Xcode 4.5.1 中:
dmzfrqdevydjuqbexdivolfeujsj/Build/Products/Debug/
)在标准输入中以任何你想要的方式启动你的应用程序管道:
echo mydata | ./MyApp.app/Contents/MacOs/MyApp
切换回 Xcode,调试器将检测到应用程序的启动并附加到它。
只是为了更好地澄清@Nestor的答案......
我想不出一种通过管道传输到 x 代码的方法,所以我在脚本的开头添加了以下代码,该代码从一个名为 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 将文件内容发送到标准输入。
还因为我有那个 if 语句,所以我将 xcode 设置为具有调试参数。这比在编译时使用注释和忘记取消注释要好。
要设置 xcode 参数,请转到:
然后在运行方案中设置参数“调试”:
不幸的是,你不能。我必须修改我的程序以从文件中读取以进行调试,如下所示:
NSFileHandle *input;
if (AmIBeingDebugged())
input = [NSFileHandle fileHandleForReadingAtPath:@"/Users/me/debug.input"];
else
input = [NSFileHandle fileHandleWithStandardInput];
AmIBeingDebugged 的来源在这里。