是否有可能在刷新之前查看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覆盖libc使用的专用缓冲区。在那些setvbuf()
调用之前执行此操作,应使数据在刷新之前最终存储在缓冲区中。
printf()
无论如何,您在缓冲区中发现的肯定是not已记录的东西,因此缓冲区的内容可能不是您所期望的。例如,我自己进行了一些测试,发现glibc似乎并不喜欢较小的缓冲区大小,并且有时会忽略用户缓冲区(不过您应该可以使用char mybuffer[BUFSIZ]; // BUFSIZ is defined in <stdio.h>
setvbuf(stdout, mybuffer, _IOLBF, BUFSIZ);
)。