【问题标题】:C++ microkernel cout problemC++微内核cout问题
【发布时间】:2011-07-27 13:36:22
【问题描述】:

好的,我正在处理我的操作系统作业。我需要编写一个微内核,它能够用线程、信号量、事件等做一些基本的事情。 BCC 3.1 正在模仿我的系统环境。经典的调试真的没用。我正在以 cout 风格进行调试。 问题是 cout 的奇怪行为。它以块或其他形式写出来。如果我这样做,比如 40 个 couts,它会写出所有内容。如果我做了 39 个,它不会写任何一个。另一方面,如果我在 40 到 79 个 couts 之间进行,它仍然只写前 40 个,但如果我做了 80 个,它们都可以,等等。数字不准确,我不确定数字是多少。但我也注意到改变 cout-ed 的字符串长度的效果相同。只有我不知道有多少个字符等于一个 cout 调用。 可根据要求提供更多信息。谢谢转发。

【问题讨论】:

  • cout 被缓冲。在需要时flush() 它,或者附加endls 刷新,或者写入cerr,这是无缓冲的。
  • cerr 不起作用。冲洗(cout)没有效果。我的意思是,cerr 确实会写出来,但方式与 cout 相同。
  • 那么您的环境可能也在缓冲。顺便提一句。我想你的意思是std::cout.flush() 而不是flush(std::cout)
  • 冲洗不起作用。我怎样才能知道它是否正在缓冲?

标签: c++ debugging cout borland-c++ microkernel


【解决方案1】:

不管std::cout 不应该缓冲输出,这听起来像是缓冲。在任何情况下,您都可以尝试通过

刷新cout

std::cout.flush();

std::cout << std::flush;

std::cout << std::endl;

甚至通过禁用缓冲:

std::cout.rdbuf()->pubsetbuf(0, 0);

【讨论】:

  • 刷新完全没有效果...我已经尝试了最后一行,但出现编译器错误:pubsetbuf 不是 streambuf 的成员。
猜你喜欢
  • 1970-01-01
  • 2019-08-11
  • 1970-01-01
  • 2013-10-20
  • 1970-01-01
  • 2018-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多