如何使用STL IO将文本导入Visual Studio输出窗口?

时间:2009-11-12 09:52:50

标签: debugging visual-c++

我一直认为在调试器中运行的MSVC ++应用程序的输出窗口已映射到其中一个标准输出流。但是当我在Windows MFC应用程序中运行此代码时,看不到任何内容:

std::cerr << "cerr"<<std::endl;
std::cout << "cout"<<std::endl;
std::clog << "clog"<<std::endl;

这是Windows的东西还是VC ++的东西? TRACE和OutputDebugString等函数/宏如何写入此窗口,我不应该在不使用它们的情况下这样做?

4 个答案:

答案 0 :(得分:4)

没有标准样式流映射到Visual Studio输出窗口。完成此操作的函数是OutputDebugString()。

你可以得到的最接近的东西是创建你自己的包装类,其行为类似于ostream,并在下面调用OutputDebugStream。

答案 1 :(得分:2)

答案 2 :(得分:0)

您可以使用RTP Macro

std:string myString = "SOMETHING";
_RPT1(_CRT_WARN, "%s\n", myString.c_str());

OutputDebugString

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&amp;)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;