c - 为什么单步执行代码时 printf 输出没有立即出现?

标签 c breakpoints anjuta

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

#include <stdio.h>

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

    return (0);
}

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

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

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

最佳答案

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

关于c - 为什么单步执行代码时 printf 输出没有立即出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46793501/

相关文章:

python - 我可以在 Python 的后台线程上放置断点吗?

c - 为什么单步执行代码时 printf 输出没有立即出现?

无法从 TextView 获取 GtkTextBuffer - C、GTK3

c - 在C中,有没有办法获取名称与字符串匹配的多个文件的大小?

c - GCC 3.4.3 选项-fstack-protector-all 的替代品?

c++ - 从 C++ 如何执行 C 中的方法或访问结构?

c++ - LLDB是如何实现设置断点功能的?

java - Eclipse 在没有断点的情况下暂停

c - 安全的 C 编程

gtk - 如何将 GTKTextBuffer 的内容保存到文件中