【问题标题】:Piping Into Application Run Under Xcode在 Xcode 下进入应用程序运行
【发布时间】:2012-04-24 07:15:58
【问题描述】:

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

如何使用 Xcode 做到这一点?

【问题讨论】:

标签: xcode debugging command-line


【解决方案1】:

只是为了更好地澄清@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 设置为具有调试参数。这比使用 cmets 执行此操作要好,并且在为 realsies 编译时忘记取消注释。

要设置 xcode 参数,请转到:

产品 > 方案 > 编辑方案

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

【讨论】:

    【解决方案2】:

    您可以将数据通过管道传输到 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,调试器将检测到应用程序的启动并附加到它。

    【讨论】:

    • 我的问题是每次运行时都必须打开终端会话。您也可以每次都将mydata 的内容复制并粘贴到控制台区域(这是我在寻找这篇文章时试图避免的)。
    【解决方案3】:

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

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

    AmIBeingDebugged 的​​来源是here

    【讨论】:

    • 你可以。 user2067021 的回答是正确的。您需要在 Xcode 中的程序中设置断点,然后单击运行按钮然后启动您的应用程序。
    • 啊,你能在七年前吗?这是每个人都渴望知道答案的问题。
    猜你喜欢
    • 2017-03-26
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 2015-05-31
    相关资源
    最近更新 更多