我的问题是一般性的,与特定的调试方案无关。
当程序意外终止(恐慌,内存损坏,访问冲突等...)时,有时最近的stdout消息不会出现在屏幕上,即使它们在终止之前发生。
这是因为首先将stdout消息写入缓冲区,该缓冲区在终止时也被擦除,而不是事先写入stdout。
我的问题是是否有一个通用选项来刷新所有调试消息 在程序意外终止之前的c / c ++代码中? (我更喜欢使用一些通用的编译器配置,而不是特定实现的特殊解决方案,例如std :: cout - 如果有这样的选项,我很高兴知道它是否与GCC和G ++相同)
注意:我假设在为每个新到达的消息刷新此缓冲区时,会损害性能。但是,它仅适用于调试版本。
感谢
答案 0 :(得分:2)
尝试setvbuf设置无缓冲区
setvbuf(stream, NULL, _IONBF, 0)