为什么在单步执行代码时不会立即显示printf输出?

时间:2013-11-03 20:49:51

标签: c breakpoints anjuta

我在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移动到第3个时,“12”将显示为输出。

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

这是因为printf写入了恰好缓冲的stdout。有关详细信息,请参阅here.

答案 2 :(得分:2)

在每个printf之后添加fflush(stdout)。您的输出很小并保持缓冲,直到程序退出。