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

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

#include  int main (void) { ° printf ("1"); ° printf ("2"); ° printf ("3"); return (0); } 

°表示我在该位置设置断点。

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

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

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

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

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

Interesting Posts