3

我正在尝试在 OS X Lion 上使用 Xcode 调试 C 命令行应用程序。应用程序需要通过标准输入进行大量输入数据。在 shell 上,我只是将一个文本文件通过管道传输到这个应用程序中。

我怎样才能用 Xcode 做到这一点?

4

3 回答 3

4

您可以将数据通过管道传输到 Xcode 项目的可执行文件中以进行调试。

在此处查看我对类似 Stackoverflow 问题的回答。

(为方便起见复制):

在 Xcode 4.5.1 中:

  1. 打开方案编辑器(产品菜单 -> 编辑方案...)
  2. 选择运行调试方案
  3. 在“信息”选项卡面板中,将“启动”单选按钮选择从“自动”更改为“等待 MyApp.app 启动”
  4. 关闭方案编辑器
  5. 按 Run 按钮构建并运行您的目标。(工具栏中的 Xcode 状态窗口将显示“等待 MyApp 启动”)
  6. 启动终端并 cd 到您构建的应用程序的文件夹。(它将类似于 /Users/user/Library/Developer/Xcode/DerivedData/MyApp- dmzfrqdevydjuqbexdivolfeujsj/Build/Products/Debug/
  7. 在标准输入中以任何你想要的方式启动你的应用程序管道:

    echo mydata | ./MyApp.app/Contents/MacOs/MyApp

  8. 切换回 Xcode,调试器将检测到应用程序的启动并附加到它。

于 2012-12-01T10:32:30.283 回答
4

只是为了更好地澄清@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 参数,请转到:

产品 > 方案 > 编辑方案 编辑方案

然后在运行方案中设置参数“调试”:

添加参数调试

于 2015-10-03T15:48:35.257 回答
1

不幸的是,你不能。我必须修改我的程序以从文件中读取以进行调试,如下所示:

    NSFileHandle *input;

    if (AmIBeingDebugged())
        input = [NSFileHandle fileHandleForReadingAtPath:@"/Users/me/debug.input"];
    else
        input = [NSFileHandle fileHandleWithStandardInput];

AmIBeingDebugged 的​​来源在这里

于 2012-10-01T13:27:18.070 回答