打印到Visual Studio中的输出窗口

Printing to output window in Visual Studio

本文关键字:输出 窗口 Studio Visual 打印      更新时间:2023-10-16

我是C++新手,最近从Linux上的g++编译切换到Visual Studio。我试图编写一个简单的程序来测试一些这样的程序:

#include <iostream>
void main()
{
    // Things
}

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

另外,是否有原因可以在执行程序时弹出黑色窗口,然后立即消失?

OutputDebugString for the win。它确实存在。只需包括Windows.h。它就在那里。

有一些方法可以有效地将stderr和stdout连接到管道,并让你将输出树脂到OutputDebugString,但听起来你正在寻找一种简单的方法。任何写入 stdout 的内容(cout 等)都会转到控制台窗口,所以在你去之前 OutputDebugString 坚果首先检查你的控制台窗口的输出......

说到控制台窗口...

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

顺便说一句:如果你使用OutputDebugString,它不会CRLF你发送的文本,所以把它包含在你的输出文本中。

下面是

我编写的一个可移植的TRACE宏。

在Windows上,它基于WhozCraig的答案中所示的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');
}
如果要

从单元测试用例中写入输出窗口,则可以使用以下方法:

#include "CppUnitTest.h"
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
TEST_METHOD(testingsomething)
{
    Logger::WriteMessage("Hello output window");
}