使用控制台输入进行Eclipse调试

时间:2013-01-14 18:39:14

标签: c++ eclipse debugging

我正在尝试使用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;
}

2 个答案:

答案 0 :(得分:7)

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

该程序详见here,但简要说明:

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

答案 1 :(得分:0)

我知道Eclipse控制台缓冲区并不总能正常工作 - 根据我的经验,这在使用C或C ++时是最糟糕的。

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

setvbuf(stdout, NULL, 0, _IONBF);

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

请注意,在通过Eclipse运行代码时,上面的行应该才能使用,以便拥有某种理智的输出缓冲区,而不需要几个混乱的代码内变通方法。在编译实际使用时,此行需要注释掉