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



是否可以在刷新之前查看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(。

最新更新