有时我们会以这种方式在代码中添加一些调试打印
printf("successfully reached at debug-point 1\n");
some code is here
printf("successfully reached at debug-point 2");
最后一次之后printf
发生分段错误。
现在在这种情况下,只有调试点 1 会在 stdio 调试点 2 上打印,打印已写入 stdio 缓冲区,但不会刷新,因为它没有得到\n
所以我们认为崩溃发生在 debug-point1 之后。
为了克服这个问题,如果我禁用缓冲选项stdio
and stderr
像这样流
setvbuf(stdout, NULL, _IONBF, 0);
setvbuf(stderr, NULL, _IONBF, 0);
那么,这样做安全吗?
为什么默认情况下所有流都是行缓冲的?
Edit :
通常为任何文件流默认分配的缓冲区的大小是多少?我认为这取决于操作系统。我想了解一下Linux。
为什么所有流默认都是行缓冲的
出于性能原因,它们被缓冲。该库尽力避免进行系统调用,因为它需要很长时间。并且并非所有这些都默认缓冲。例如stderr
is usually无缓冲和stdout
仅当它引用 tty 时才是行缓冲的。
那么这样做安全吗?
禁用缓冲是安全的,但我必须说这不是最好的调试技术。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)