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

804*_*142 1 c breakpoints anjuta

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

#include <stdio.h>

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

    return (0);
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

Bar*_*mar 5

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