在Visual Studio中打印到输出窗口

时间:2012-10-13 05:08:25

标签: c++ visual-studio-2010

我对C ++很陌生,最近从Linux上的g ++编译转换为Visual Studio。我试着写一个简单的程序来测试这样的东西:

#include <iostream>

void main()
{
    // Things
}

我正在使用cout <<来显示函数返回的内容,然后才意识到它不会以这种方式工作以打印到Visual Studio中的输出窗口。我知道我可以使用调试模式,但在Visual Studio中是否有一种方法可以向窗口显示输出?我发现使用OutputDebugString建议的一篇较旧的帖子,但我没有将代码编写为Win32应用程序,我认为这个函数对于简单的cpp文件不存在。

另外,有没有理由在程序执行时弹出黑色窗口,然后立即消失?

3 个答案:

答案 0 :(得分:4)

胜利的OutputDebugString。它确实存在。只需包含windows.h。就在那里。

有一些方法可以有效地将stderr和stdout连接到管道,并将输出重新链接到OutputDebugString,但听起来你正在寻找一种简单的方法。写入stdout(cout,无论如何)的任何东西都将转到控制台窗口,所以在你去OutputDebugString之前先检查你的控制台窗口是否有输出......

说到控制台窗口......

黑色弹出并立即消失的原因是您的控制台窗口正在打开和关闭,并且在完成任何实质性操作之前,您的过程很可能正在完成。在IDE中的main()末尾堵塞断点。然后你可以 Alt + Tab

BTW:如果你使用OutputDebugString,它不会对您发送的文本进行CRLF,因此请在输出文本中包含该文本。

答案 1 :(得分:2)

下面是我写的便携式TRACE宏。

在Windows上,它基于OutputDebugString,如WhozCraig的回答所示。

#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');
}

答案 2 :(得分:0)

如果要从unittest案例中写入输出窗口,则可以使用以下内容:

#include "CppUnitTest.h"

using namespace Microsoft::VisualStudio::CppUnitTestFramework;

TEST_METHOD(testingsomething)
{
    Logger::WriteMessage("Hello output window");
}