CLion在调试时无法显示输出

19

当我启动程序时,这是输出:

-------------------- HASHMAP MANAGEMENT BOOT MENU -------------------------
Would you like to:
(a) create a new hashmap
(b) load an existing one
(q) exit
>

然而,在调试时,这一切都没有显示出来。检查调试时,它确实执行了 printf() 命令,但它只是拒绝让它们显示在控制台中。输入被注册,但输出从未出现。

int main(void){
    bool on = true;
    char choice = ' ';
    int status = 0;
    while(on){
        if(status == -1){
            printf("\n[ERROR] : HASHMAP NOT INITIALISED\n");
        }
        printf("\n-------------------- HASHMAP MANAGEMENT BOOT MENU -------------------------\n");
        printf("Would you like to:\n(a) create a new hashmap\n(b) load an existing one\n(q) exit\n> ");

        scanf("%c",&choice);
        ...
        ...
    }
}

以下是代码的开头部分,不包括所有的#include内容。此外,由于某种原因,CLion表示我正在构建的代码为task2-a.c | Debug,如果有帮助的话,task2-a.c是被构建的C文件的名称。我不知道发生了什么...

更新:在Ubuntu 17.04 Clion 2017.2上调试很好用。只是在Windows 10 CLion 2017.3上无法使用。

2个回答

30

在任何printf语句或输出发生之前加上setbuf(stdout, 0);可以解决此问题。


2
在Windows上确实存在stdout缓冲问题,我们已经意识到了(https://intellij-support.jetbrains.com/hc/en-us/community/posts/115000740490-Where-did-the-black-windows-go-?page=1#community_comment_115000619510)。感谢您在此处发布解决方法! - Eldar Abusalimov
3
似乎问题在CLion 2019.3中仍然存在;另外,setbuf已被弃用,因此任何人都应该使用setvbuf代替。 - Matze
这取决于情况。setbuf似乎正在工作。而且它的工作非常好。 - Oleg Kokorin
2
使用以下方式设置 setvbuf:setvbuf(stdout, NULL, _IONBF, 0); - Mattwmaster58

3
如果您不想使用内置的clion控制台,您可以通过更改clion使用的默认调试器来解决此问题。
在“设置 =&gt; 工具链 =&gt; < your compiler> => 调试器”下将Bundled GDB更改为您编译器的调试器,例如MinGW: Clion Settings

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接