我一直认为在调试器中运行的MSVC ++应用程序的输出窗口已映射到其中一个标准输出流。但是当我在Windows MFC应用程序中运行此代码时,看不到任何内容:
std::cerr << "cerr"<<std::endl;
std::cout << "cout"<<std::endl;
std::clog << "clog"<<std::endl;
这是Windows的东西还是VC ++的东西? TRACE和OutputDebugString等函数/宏如何写入此窗口,我不应该在不使用它们的情况下这样做?
答案 0 :(得分:4)
没有标准样式流映射到Visual Studio输出窗口。完成此操作的函数是OutputDebugString()。
你可以得到的最接近的东西是创建你自己的包装类,其行为类似于ostream,并在下面调用OutputDebugStream。
答案 1 :(得分:2)
下面: Capturing cout in Visual Studio 2005 output window? 也在这里: http://www.codeproject.com/KB/debug/STLDebugLogger.aspx
答案 2 :(得分:0)
您可以使用RTP Macro:
std:string myString = "SOMETHING";
_RPT1(_CRT_WARN, "%s\n", myString.c_str());
std:string myString = "SOMETHING";
OutputDebugString(savedStatementText.c_str());
答案 3 :(得分:0)
这是流媒体友好的方法,我在网上找到了:
class debug_stream : public std::ostringstream
{
public:
template<typename T>
friend debug_stream& operator<<(debug_stream& os, T&& s);
};
template<typename T>
debug_stream& operator<<(debug_stream& os, T&& s)
{
(ostringstream&)os << s;
PrintToDebug(os.str());
os.str("");
return os;
}
class dbgview_buffer : public std::stringbuf
{
public:
~dbgview_buffer()
{
sync(); // can be avoided
}
int sync()
{
OutputDebugString(str().c_str());
str("");
return 0;
}
};
以这种方式使用:
dbgview_buffer buf;
ostream dbgview(&buf);
dbgview << "test" << endl;