CLion 不会在调试中显示输出

问题描述 投票:0回答:3

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

-------------------- 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。

c debugging clion
3个回答
33
投票

在任何 printf 语句或任何输出发生之前放置

setbuf(stdout, 0);
解决了这个问题。


3
投票

如果您不喜欢使用内置的 clion 控制台,可以通过更改 clion 使用的默认调试器来解决问题。

Settings => Toolchain => <your compiler> => Debugger
下将 Bundled GDB 更改为编译器的调试器,例如明GW: Clion Settings


0
投票

您可以将

fflush
与流一起用作参数(如
fflush(stdout)
),或使用
NULL
作为参数来刷新所有流。使用
fflush
为我在 CLion 中解决了这个问题,您可以将其直接添加到日志宏、按一定时间间隔或在主循环之后。

我不想仅仅为了在 CLion 中打印而弄乱缓冲区大小,因此设置 setbuf 对我来说不是一个选项。

© www.soinside.com 2019 - 2024. All rights reserved.