在Visual C++ IDE中将输出打印到输出窗口

4
如何在Visual C++的输出窗口中打印信息?我正在开发的项目不是控制台窗口项目类型。当我构建和运行它时,它不会打开控制台窗口,而是打开一个win32应用程序,这个应用程序不是由我构建的,我只是在其中添加一些东西。
我对C++还比较新,因为我无法在任何控制台上打印变量,所以很难调试。
由于Visual Studio 2010项目在构建和运行时不会启动控制台,那么我能否仍然将输出(例如变量和其他内容)打印到IDE的输出窗口?
谢谢任何帮助。

2
这不是调试程序的好方法。学习如何使用调试器。 - Hans Passant
我正在努力。但是我对C++中传递的所有引用和值副本感到非常困惑,因为我非常习惯像Java这样的高级语言。 - Carven
5个回答

7

您可以使用OutputDebugString("...");将内容打印到Visual Studio的输出窗口。不过,您需要#include <windows.h>


我尝试过它并且它有效。但是当我这样做时,出现了错误:OutputDebugString("point1: " << point1[0] << ", " << point1[1] << ", " << point1[2] << endl); 这是怎么回事? - Carven
1
OutputDebugString只接受以空字符结尾的字符串进行显示。在将其传递给函数之前,您必须手动构建它。请查看sprintf函数。 - Darcara

5

我编写了一个可移植的 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

1

与其他答案所示的在VS中打印到输出窗口不同,我更喜欢在我的GUI应用程序中创建一个控制台窗口,然后使用常规的printf或cout将调试信息写入其中。这样做的好处是,即使您在没有调试器的情况下运行,也可以这样做。

请参见此网站,了解设置控制台的简单函数。


0

0

您可以使用Windows函数OutputDebugString(请参见此处)将输出发送到调试器。这些输出会显示在VS输出窗口中。您还可以使用外部应用程序(例如DebugView)观察这些输出。

请记得从生产代码中删除这些语句,如果您不希望其他人看到这些调试消息(否则使用DebugView等工具是可能的...)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接