【问题标题】:Why does printf output not appear right away when stepping through the code?为什么单步执行代码时 printf 输出没有立即出现?
【发布时间】:2013-11-14 11:51:27
【问题描述】:

我在 Fedora 20 上使用 Anjuta 和 gdb 并创建了一个 C Makefile 项目。代码如下所示:

#include <stdio.h>

int main (void)
{
°   printf ("1");
°   printf ("2");
°   printf ("3");

    return (0);
}

° 表示我在那个位置设置了一个断点。

现在,当我调试代码时,没有输出,而当前行是这些 printf 函数之一。只有当我退出主'123'时才会出现在终端中。

如果我将 \n 添加到第二个 printf 参数,那么当我从断点 2 移动到第三个断点时,'12' 会显示为输出。

【问题讨论】:

    标签: c breakpoints anjuta


    【解决方案1】:

    这是因为 printf 写入恰好被缓冲的标准输出。更多详情见here.

    【讨论】:

    • 它总是被缓冲...而不是“碰巧”
    • 好吧,你可以通过调用 setbuf() 使其无缓冲
    • @texasbruce 标准输出总是被缓冲。第一,它是实现定义的。 2nd如果缓冲与否,模式可以改变..
    【解决方案2】:

    默认情况下,stdout 在写入终端时是行缓冲的,在写入任何其他类型的流时是完全缓冲的。由于您没有打印任何换行符,因此正在缓冲输出。您可以使用setbuf() 更改缓冲模式,以换行符结束每个字符串,或者在您想要打印时调用fflush()

    【讨论】:

      【解决方案3】:

      在每个 printf 之后添加 fflush(stdout)。您的输出很小,并且在程序退出之前一直保留在缓冲区中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-05-11
        • 1970-01-01
        • 2021-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多