在Xcode下管理应用程序运行

时间:2012-04-24 07:15:59

标签: xcode debugging command-line

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

如何使用Xcode执行此操作?

3 个答案:

答案 0 :(得分:3)

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

请参阅我对类似Stackoverflow问题here的回答。

(为方便起见而复制):

在Xcode 4.5.1中:

  1. 打开方案编辑器(产品菜单 - >编辑方案...)
  2. 选择“运行调试方案”
  3. 在“信息”标签面板中,将“启动”单选按钮选项从“自动”更改为“等待MyApp.app启动”
  4. 关闭方案编辑器
  5. 按“运行”按钮构建并运行目标。 (工具栏中的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,调试器将检测到您的应用程序启动并附加到它。

答案 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参数,转到:

产品>方案>编辑方案 Edit Scheme

然后在运行方案中设置参数'debug':

add argument debug

答案 2 :(得分:1)

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

    NSFileHandle *input;

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

AmIBeingDebugged的来源是here