【问题标题】:How can I view the stdout buffer before flushing it?如何在刷新之前查看标准输出缓冲区?
【发布时间】:2020-09-02 22:13:16
【问题描述】:
是否可以在刷新之前查看我的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 " 的缓冲区。
【问题讨论】:
标签:
c
printf
buffer
stdout
flush
【解决方案1】:
你通常不能,但如果你使用setvbuf(),你可以用你创建的一个覆盖libc使用的私有缓冲区。在这些printf() 调用之前执行此操作应该会使数据在被刷新之前最终在您的缓冲区中。
char mybuffer[BUFSIZ]; // BUFSIZ is defined in <stdio.h>
setvbuf(stdout, mybuffer, _IOLBF, BUFSIZ);
无论如何,您会在缓冲区中找到的内容肯定不是记录在案的内容,因此缓冲区的内容可能不是您所期望的。例如,我自己做一些测试,我发现 glibc 似乎不喜欢小的缓冲区大小并且有时会忽略用户缓冲区(不过你应该可以使用 BUFSIZ)。