iOS   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Xcode和Curses.h,错误打开终端大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我试用Xcode编译一个简单的诅咒项目. 程序在带有标志-lcurses的终端中用g编译好,运行正常. 通过创建类型为c的命令行工具开始. 导入curses.h进入我的主要. 在Tar​​get“程序”信息中 – >一般 – >已添加链接库libcurses.dylib. 编译正常但终端窗口无法打开. 在调试控制台中,输出是, 程序已加载. 跑 [切换到过程3424] 打开终端时出错:未知. 正
我试用Xcode编译一个简单的诅咒项目.
程序在带有标志-lcurses的终端中用g编译好,运行正常.

通过创建类型为c的命令行工具开始.
导入curses.h进入我的主要.
在Tar​​get“程序”信息中 – >一般 – >已添加链接库libcurses.dylib.

编译正常但终端窗口无法打开.
在调试控制台中,输出是,

程序已加载.

[切换到过程3424]
打开终端时出错:未知.
正在运行…

我可以去构建文件夹,只是在终端打开程序,但有没有办法让xcode打开终端?

谢谢你的帮助!

解决方法

在xcode中使用Ncurses调试时遇到了同样的问题.最后,我找到了一个很好的方法来管理使用Terminal.app进行调试,允许调试ncurses.

我们知道,要初始化和使用Ncurses,我们需要在终端中运行@R_781_9616@程序.但是当我们按下运行按钮时,Xcode没有打开终端.因此,如果我们从代码中请求环境变量TERM,我们将获得NULl.这就是应用程序在initscr()上崩溃的原因.

但Xcode允许我们为运行方案(产品>方案>编辑方案…>运行)设置启动选项为“等待可执行文件启动”而不是认“自动”:

Xcode和Curses.h,错误打开终端

现在我们可以在xcode中按Run并在终端中手动启动@R_781_9616@程序.因此调试器将附加到应用程序.有两个问题:

>如果说实话,调试器不会在没有其他操作的情况下自我附加,它将跳过所有断点.但是我们可以通过在程序开始时调用getchar()来管理它.我通过引入指示我们在终端中调试的命令行参数解决了这个问题:

for (int argi = 1; argi < argc; argi++)
{
    if (strcmp(argv[argi],"--debug-in-terminal") == 0)
    {
        printf("Debugging in terminal enabled\n");
        getchar(); // Without this call debugging will be skipped
        break;
    }
}

因此,只有当我们想在Terminal.app中调试时,我们才能打开getchar()调用
>我们需要打开终端并在每次按Xcode中的Run时手动启动应用程序.这真的很烦人.所以,我决定通过运行方案设置中的预操作来自动化它.我们的想法是打开终端并在其中运行@R_781_9616@程序.但是这个预操作应该启动应用程序,之后Xcode将执行Run操作,让它首先“等待可执行文件启动”.所以我们需要一个延迟的后台非阻塞任务.这可以通过以下sHell命令来实现(&最终需要在后台运行):

osascript -e 'tell application "Terminal"' -e 'delay 0.5' -e "set currentTab to do script (\"$TARGET_BUILD_DIR/$PRODUCt_name --debug-in-terminal\")" -e 'end tell' &

不要忘记在“提供构建设置”列表中选择您的应用程序,以使可访问的重要环境变量$TARGET_BUILD_DIR和$PRODUCt_name

Xcode和Curses.h,错误打开终端

所以,现在当我们按Run时,Xcode将等待可执行文件附加,终端将被打开,@R_781_9616@程序将使用命令行选项–debug-in-terminal执行,所有断点都将被触发.

非常好,但最终关闭此终端窗口会更好,因为它会为每个调试会话生成一个新窗口.让我们在Post-actions for Run方案中做到:

osascript -e 'activate application "Terminal"' -e 'delay 0.5' -e 'tell application "System Events"' -e 'tell process "Terminal"' -e 'keystroke "w" using {Command down}' -e 'end tell' -e 'end tell'

Xcode和Curses.h,错误打开终端

此命令只关闭活动终端窗口,因此如果您计划在调试会话期间将某个终端用于其他目的,则可能不需要此Post-action,因为您可能会意外关闭某个重要窗口.

最后,一个安全ncurses代码的想法,检查我们是否可以使用Ncurses或不:

#include <stdlib.h>
#include <String.h>
#include <ncurses.h>


bool IsTerminalAvailable = false; // check this global variable before ncurses calls


int main(int argc,const char *argv[])
{
    for (int argi = 1; argi < argc; argi++)
    {
        if (strcmp(argv[argi],"--debug-in-terminal") == 0)
        {
            printf("Debugging in terminal enabled\n");
            getchar(); // Without this call debugging will be skipped
            break;
        }
    }

    char *term = getenv("TERM");

    IsTerminalAvailable = (term != null);

    if (IsTerminalAvailablE)
        IsTerminalAvailable = (initscr() != null);

    // Do some code here....

    if (IsTerminalAvailablE)
    {
        printw("Press any key to exit...");
        refresh();

        getch();

        endwin();
    }

    return 0;
}

大佬总结

以上是大佬教程为你收集整理的Xcode和Curses.h,错误打开终端全部内容,希望文章能够帮你解决Xcode和Curses.h,错误打开终端所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。