刷新基于c / c ++的可执行文件的stdout消息

时间:2015-08-05 11:25:08

标签: c linux gcc output-buffering

我的问题是一般性的,与特定的调试方案无关。

当程序意外终止(恐慌,内存损坏,访问冲突等...)时,有时最近的stdout消息不会出现在屏幕上,即使它们在终止之前发生。

这是因为首先将stdout消息写入缓冲区,该缓冲区在终止时也被擦除,而不是事先写入stdout。

我的问题是是否有一个通用选项来刷新所有调试消息 在程序意外终止之前的c / c ++代码中? (我更喜欢使用一些通用的编译器配置,而不是特定实现的特殊解决方案,例如std :: cout - 如果有这样的选项,我很高兴知道它是否与GCC和G ++相同)

注意:我假设在为每个新到达的消息刷新此缓冲区时,会损害性能。但是,它仅适用于调试版本。

感谢

1 个答案:

答案 0 :(得分:2)

尝试setvbuf设置无缓冲区

setvbuf(stream, NULL, _IONBF, 0)