使用控制台输入的Eclipse调试

Eclipse debugging with input from console

本文关键字:Eclipse 调试 输入 控制台      更新时间:2023-10-16

我正在尝试使用Eclipse调试我用c++编写的程序。程序包括从用户处获取输入,但是当我将输入输入到控制台时,它不会继续运行代码(它会继续请求输入)。我不能调试没有解决这个问题,并将感谢一些帮助。谢谢你。

代码在while循环中卡住了:

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("ERRORn");
            break;
        }
    };
    fclose(inputFile);
    return 0;
}

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

这里详细描述了该过程,但简单地说:

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

我知道Eclipse控制台缓冲区并不总是像它应该的那样工作-以我的经验,当使用C或c++时,这是最糟糕的。

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

setvbuf(stdout, NULL, 0, _IONBF);

然而,我不知道这在使用stdin时如何影响Eclipse中的调试。你的最佳选择是使用Nicolas的答案来运行DOS控制台。我相信还需要再做一点工作,但已经足够了。

请注意,在通过Eclipse运行代码时,应该只使用上面的,以便有某种相同的输出缓冲区,而不需要一些混乱的代码内解决方法。在实际编译时,需要将这一行注释掉