在刷新之前如何查看标准输出缓冲区?

How can I view the stdout buffer before flushing it?

是否可以在刷新之前查看我的 stdout 缓冲区中的内容?如果是,怎么做?

例如,我正在调试以下代码:

for(int i = 0; i < 10; i++){
    printf("%d ", i);
}
printf("\n"); // Break point on this line

如果我在调试器的最后一行停止,我想查看该缓冲区,它应该包含 "0 1 2 3 4 5 6 7 8 9 ".

你通常不能,但如果你使用 setvbuf() 你可以用你创建的覆盖 libc 使用的私有缓冲区。在那些 printf() 调用之前执行此操作应该使数据在刷新之前最终进入缓冲区。

char mybuffer[BUFSIZ]; // BUFSIZ is defined in <stdio.h>
setvbuf(stdout, mybuffer, _IOLBF, BUFSIZ);

无论如何,您在缓冲区中找到的内容绝对不是已记录的内容,因此缓冲区的内容可能不是您所期望的。例如,我自己做了一些测试,我发现 glibc 似乎不喜欢小缓冲区大小,有时会忽略用户缓冲区(不过 BUFSIZ 你应该没问题)。