【问题标题】:Printing output on the Output Window in Visual C++ IDE在 Visual C++ IDE 的输出窗口中打印输出
【发布时间】:2011-10-08 15:36:18
【问题描述】:

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

我对 C++ 还是很陌生,因为我无法在任何控制台上打印变量,这让我很难调试。

由于 Visual Studio 2010 项目在我构建和运行时没有启动控制台,我是否仍然可以在 IDE 的“输出”窗口中打印变量等输出?

感谢您的帮助。

【问题讨论】:

  • 这不是调试程序的好方法。了解如何使用调试器。
  • 我正在尝试。但是我对 C++ 中通过 copy 传递的所有引用和值感到非常困惑,因为我非常习惯于 Java 等高级语言。

标签: c++ visual-studio-2010


【解决方案1】:

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

【讨论】:

  • 我试过了,效果很好。但是当我这样做时,它有错误:OutputDebugString("point1: " << point1[0] << ", " << point1[1] << ", " << point1[2] << endl);这有什么问题?
  • OutputDebugString 只显示一个以空字符结尾的字符串。您必须手动构建它,然后才能将其传递给函数。看看sprintf 函数。
【解决方案2】:

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

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

【讨论】:

  • 传递一个 std:string 我得到:“const char *”类型的参数与“LPCWSTR”类型的参数不兼容?
【解决方案3】:

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

有关设置控制台的简单功能,请参阅this site

【讨论】:

    【解决方案4】:

    我以前用过这个,虽然不是用 win32 应用程序。不过你可以试一试:)

    http://www.cplusplus.com/forum/lounge/17371/

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-12
        • 1970-01-01
        • 2017-12-28
        • 1970-01-01
        • 1970-01-01
        • 2012-05-10
        • 1970-01-01
        相关资源
        最近更新 更多