在刷新前如何查看stdout缓冲区?

问题描述 投票:0回答:1

是否有可能在刷新之前查看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个回答
0
投票

您通常不能,但是如果使用setvbuf(),则可以用您创建的libc覆盖libc使用的专用缓冲区。在那些setvbuf()调用之前执行此操作,应使数据在刷新之前最终存储在缓冲区中。

printf()

无论如何,您在缓冲区中发现的肯定是not已记录的东西,因此缓冲区的内容可能不是您所期望的。例如,我自己进行了一些测试,发现glibc似乎并不喜欢较小的缓冲区大小,并且有时会忽略用户缓冲区(不过您应该可以使用char mybuffer[BUFSIZ]; // BUFSIZ is defined in <stdio.h> setvbuf(stdout, mybuffer, _IOLBF, BUFSIZ); )。

© www.soinside.com 2019 - 2024. All rights reserved.