2011-10-08 184 views
4

如何在Visual C++的输出窗口上打印?我正在处理的项目不是控制台窗口项目类型。那是当我构建并运行它时,它不打开控制台窗口。相反,它会打开一个win32应用程序,这个应用程序不是由我自己构建的。我只是增加了一些东西。在Visual C++ IDE的输出窗口上打印输出

我对C++来说很新颖,因为我无法在任何控制台上打印变量,这使我很难调试。

由于Visual Studio 2010项目在构建和运行时没有启动控制台,我仍然可以在IDE的Output窗口上打印输出,如变量和其他项目吗?

感谢您的任何帮助。

+2

这不是一个好办法调试你的程序。了解如何使用调试器。 –

+0

我在努力。但是我对C++中通过拷贝传递的所有引用和值感到困惑,因为我非常习惯于像Java这样的更高级的语言。 – Carven

回答

6

您可以使用OutputDebugString("...");打印到Visual Studio中的输出窗口。虽然你必须要#include <windows.h>

+0

我试了一下,它的工作原理。但是,当我这样做,它有错误:'OutputDebugString(“point1:”<< point1 [0] <<“,”<< point1 [1] <<“,”<< point1 [2] << endl); “这有什么问题? – Carven

+1

OutputDebugString只会显示一个以null结尾的字符串。您必须在将它传递给函数之前手动构建它。看看[sprintf](http://msdn.microsoft.com/en-us/library/ybk95axf%28v=vs.71%29.aspx)函数。 – Darcara

0

您可以使用Windows功能OutputDebugString(请参阅here)将输出发送到调试器。这些输出显示在VS输出窗口中。您还可以使用外部应用程序观看这些输出,例如DebugView

记得从你的产品代码中删除这些言论,如果你不希望其他人看到这些调试信息(这会使用工具,如DebugView中其他可能......)

1

除了打印的输出在其他答案中显示的VS中,我更愿意在我的GUI应用程序中创建控制台窗口,然后使用常规printf或cout将调试信息写入它。这有一个好处,即使在没有调试器的情况下运行也可以实现。

请参阅this site了解设置控制台的简单功能。

3

我写了一个可移植的TRACE宏。
在MS-Windows上,它基于OutputDebugString,正如其他答案所示。

在这里我分享我的工作:

#ifdef ENABLE_TRACE 
# ifdef _MSC_VER 
# include <windows.h> 
# include <sstream> 
# define TRACE(x)       \ 
    do { std::stringstream s; s << (x);  \ 
      OutputDebugString(s.str().c_str()); \ 
     } while(0) 
# else 
# include <iostream> 
# define TRACE(x) std::clog << (x) 
# endif  // or std::cerr << (x) << std::flush 
#else 
# define TRACE(x) 
#endif 

例如:

#define ENABLE_TRACE //can depend on _DEBUG or NDEBUG macros 
#include "my_above_trace_header.h" 

int main (void) 
{ 
    int  v1 = 123; 
    double v2 = 456.789; 
    TRACE ("main() v1="<< v1 <<" v2="<< v2 <<'\n'); 
} 

请随时给任何改进/建议/贡献;-)

+1

传递一个std:string我得到:“const char *”类型的参数与类型“LPCWSTR”的参数不兼容? – MaurGi