【问题标题】:Eclipse debugging with input from console使用来自控制台的输入进行 Eclipse 调试
【发布时间】:2017-04-10 04:52:29
【问题描述】:

我正在尝试调试我使用 Eclipse 用 C++ 编写的程序。 该程序包括从用户那里获取输入,但是当我将输入输入到控制台时,它永远不会继续运行代码(它会一直要求输入)。 如果不修复此问题,我将无法调试,希望能得到一些帮助。 谢谢。

代码卡在 while 循环 fgets 上:

int main(int argc, const char**argv) {
    FILE* inputFile = NULL;

    setlocale(LC_ALL, "");
    if(argc == 2){
        inputFile = fopen(argv[1], "r");
        if (inputFile == NULL){
            printf("Problem opening file %s, make sure correct path name is given.\n", argv[1]);
            return 0;
        }
    }
    else {
        inputFile = stdin;
    }

    char buffer[MAX_STRING_INPUT_SIZE];
    // Reading commands
    while ( fgets(buffer, MAX_STRING_INPUT_SIZE, inputFile) != NULL ) {
        fflush(stdout);
        if ( parser(buffer) == error ){
            printf("ERROR\n");
            break;
        }
    };
    fclose(inputFile);
    return 0;
}

【问题讨论】:

  • 可以在这里附上相关代码吗?
  • 在 Eclipse 之外将程序作为独立可执行文件运行时是否遇到同样的问题?
  • 看看这是否有帮助:stackoverflow.com/questions/4711098/…
  • 听起来像是一个无限循环。
  • 不是。当我在终端中运行它时,它可以工作。

标签: c++ eclipse debugging


【解决方案1】:

问题来自 Eclipse 缓冲控制台输入。 修复它的一种方法是强制 Eclipse 使用 Windows/DOS 本机控制台进行调试。

该过程在here中有详细描述,但很简短:

  1. 从 Eclipse 菜单文件 > 新建 > C++ 项目中创建您的 Hello World C++ 命令行项目
  2. 在您的项目文件夹中,创建一个“.gdbinit”文本文件。它将包含您的 gdb 调试器配置
  3. 编辑“.gdbinit”,并添加以下行(不带引号):“set new-console on”
  4. 在 Eclipse 中,转到菜单 Run > “Debug Configurations”,然后在左侧窗格中选择您的应用程序名称
  5. 在“调试器”选项卡中,确保“GDB 命令文件”现在指向您的 « .gdbinit » 文件。否则,输入“.gdbinit”配置文件的路径
  6. 单击«应用»和«调试»。你完成了 !应启动本机 DOS 命令行。

【讨论】:

  • 如何停止 Eclipse 缓冲控制台输入,同时“运行应用程序作为”(不进行调试)?
  • 你是救生员!
【解决方案2】:

我知道 Eclipse 控制台缓冲区并不总是按应有的方式工作 - 根据我的经验,使用 C 或 C++ 时它是最糟糕的。

如果您想在 Eclipse 中运行已编译的代码,这将有很大帮助,但不会消除您在 Eclipse 中可能遇到的显示问题:

setvbuf(stdout, NULL, 0, _IONBF);

但是,我不知道这对使用stdin 时在Eclipse 中的调试有何影响。您的最佳 选项是使用Nicolas's answer 通过 DOS 控制台运行。多做一些工作,但我相信就足够了。

请注意,在通过 Eclipse 运行代码时,应使用上述行,以便获得某种健全的输出缓冲区,而不会出现一些混乱的代码内解决方法。此行需要在编译时注释掉以供实际使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    • 2012-09-18
    • 1970-01-01
    • 2021-12-25
    • 2020-07-31
    相关资源
    最近更新 更多