2014-11-04 159 views
0

我正在开发一个非托管C++ 11应用程序并在VS2013中进行调试。我有一个辅助类VS2013 - 输出窗口不显示std :: cout

#include <cstdio> 
class DebugHelper : public dbg::IDebugHelper { 
    public: 
    virtual void outputLine(const std::string & message) const override 
    { std::cout << message << std::endl; } 
    ..... 
}; 

我预计串通过DebugHelper的outputLine印刷将显示在工作室输出窗口。然而,对于std :: cout和std :: err都不会发生这种情况。它应该吗?项目属性中是否存在某种我缺少的设置?顺便说一句,在Mac下QtCreator中的代码工作正常。

+0

来自某个类的代码行并不真正证明您正在输出任何内容。向我们展示演示该问题的程序。编辑:如果它是调试窗口,则需要使用'OutputDebugString'或'TRACE'宏。 – PaulMcKenzie 2014-11-04 21:38:32

回答

2

对于Visual Studio,请使用OutputDebugStringTRACE输出到调试监视器(在Visual Studio中运行时为Output窗口)。

为了调试目的,IMO使用上述函数输出字符串优于cout以及糟糕的“MessageBox”方法,因为这两种其他方法都可能(并且很多时候会)干扰程序的运行你在跑步。

+0

谢谢。我对TRACE有怀疑,因为我需要在调试版本和发布版本中都输出。然而OutputDebugString可以完成我需要的功能,并且可以在调试和发布时使用。 – LRaiz 2014-11-04 23:02:58

+0

@LRaiz - 我更喜欢OutputDebugString - 只是为了防止碰到它而添加了'TRACE'。 – PaulMcKenzie 2014-11-04 23:04:28

2

输出窗口显示来自调试流的内容 - 控制台输出进入控制台窗口。

+1

更具体地说,cout被重定向到标准输出,这是默认情况下的控制台窗口。可以发送到其他位置(即文件)。 – Jeff 2014-11-04 21:40:15